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

  • 365multimedia

    365multimedi

    26 ŞUBAT 2009
  • Friday NightFort

    Friday Night

    15 EYLÜL 2011
  • MkElite

    MkElite

    13 NİSAN 2012