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

  • Matus Slovak

    Matus Slovak

    5 Temmuz 2007
  • TheScorpioTechno

    TheScorpioTe

    15 Aralık 2010
  • WhtButterflyLiz

    WhtButterfly

    14 NİSAN 2008