SORU
6 AĞUSTOS 2011, CUMARTESİ


C 11: menzil tabanlı nasıl kullanılır() ile döngü std::map?

C 0 x için yaygın örneği aralığı tabanlı() döngü her zaman böyle basit bir şeyi

std::vector<int> numbers = { 1, 2, 3, 4, 5, 6, 7 };
for ( auto xyz : numbers )
{
     std::cout << xyz << std::endl;
}

Bu durumda xyz int. Ama, bir harita gibi bir şey olduğunda ne olur? Bu örnekte: değişkenin türü nedir

std::map< foo, bar > testing = { /*...blah...*/ };
for ( auto abc : testing )
{
    std::cout << abc << std::endl;         // ? should this give a foo? a bar?
    std::cout << abc->first << std::endl;  // ? or is abc an iterator?
}

Konteyner geçilen basit bir şey olduğu zaman aralığı tabanlı gibi görünüyor() döngüler bize her öğe, bir yineleyici vermeyecektir. Eğer yineleyici olsaydı ne güzel...her zaman yapmamız gereken ilk şey her neyse inceleyebilirsiniz.

Ama haritalar ve multimaps gibi şeyler söz konusu olduğunda ne beklediğini anlamış değilim.

(Hala g aralığı tabanlı döngüler g olan 4.6, henüz deneme fırsatım olmadı olsa 4.4.)

CEVAP
6 AĞUSTOS 2011, CUMARTESİ


Kabın her öğe std::pair<const K, V> typedef map<K, V>::value_type,. Sonuç olarak, bu gibi yazmak istiyorum

for (auto& kv : myMap) {
    std::cout << kv.first << " has value " << kv.second << std::endl;
}

Verimlilik için, döngü parametresi bir referans yapmak için iyi bir fikirdir. Ayrıca eğer bu değerler salt okunur bir görünüm istiyorsan const yapmayı düşünebiliriz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kimberly p

    kimberly p

    23 Ocak 2010
  • Phandroid

    Phandroid

    26 Ocak 2009
  • Wild Academy

    Wild Academy

    8 Aralık 2009