SORU
21 EYLÜL 2008, Pazar


Bir std tüm anahtarları (veya değerler) almak için nasıl::map?

Bu ben dışarı Olası yollardan biridir:

struct RetrieveKey
{
    template <typename T>
    typename T::first_type operator()(T keyValuePair) const
    {
        return keyValuePair.first;
    }
};

map<int, int> m;
vector<int> keys;

// Retrieve all keys
transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());

// Dump all keys
copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));

Tabii ki, aynı zamanda başka bir functor tanımlayarak haritadan tüm değerleri almak edebilirizRetrieveValues.

Bunu kolayca yapabilmek için başka bir yol var mı? (Her zaman merak ediyorum::std göster bize bunu yapmak için, bir üye işlev içermez.)

CEVAP
21 EYLÜL 2008, Pazar


Çözümünüz işe gerekirken, okunması zor diğer programcılar beceri seviyesine bağlı olabilir. Ayrıca, işlevselliği aramak sitesinden uzaklaşıyor. Bakım biraz daha zor yapabilirsiniz.

Amacınız bir vektör içine anahtarları almak için ya da her ikisini de yapıyorum yani print yazdırmak için emin değilim. Böyle bir şey deneyebilirsiniz:

map<int, int> m;
vector<int> v;
for(map<int,int>::iterator it = m.begin(); it != m.end();   it) {
  v.push_back(it->first);
  cout << it->first << "\n";
}

Ya da daha basit, eğer Destek kullanıyorsanız:

map<int,int> m;
pair<int,int> me; // what a map<int, int> is made of
vector<int> v;
BOOST_FOREACH(me, m) {
  v.push_back(me.first);
  cout << me.first << "\n";
}

Şahsen, daha az yazmak olduğundan BOOST_FOREACH sürümü seviyorum ve ne yaptığını hakkında çok açık.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • happyjpy

    happyjpy

    22 AĞUSTOS 2009
  • HowcastFoodDrink

    HowcastFoodD

    21 EYLÜL 2010
  • FusioNGamiing

    FusioNGamiin

    10 Temmuz 2007