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

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007
  • MagicofRahat

    MagicofRahat

    13 Temmuz 2007