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

  • julioissk84life

    julioissk84l

    18 ŞUBAT 2008
  • Slave Boy Films - Fandom from a Galaxy Far Far Away

    Slave Boy Fi

    12 HAZİRAN 2009
  • wowchick16

    wowchick16

    17 Mart 2007