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

  • FND Films

    FND Films

    2 Mayıs 2006
  • LevelUpTuts

    LevelUpTuts

    20 Ocak 2012
  • TecNoob

    TecNoob

    15 AĞUSTOS 2013