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

  • GoProTutorials

    GoProTutoria

    18 NİSAN 2011
  • NCIX Tech Tips

    NCIX Tech Ti

    2 Ocak 2007
  • the one am radio

    the one am r

    6 Mayıs 2006