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

  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006
  • TotalSeminarsChannel

    TotalSeminar

    16 Mart 2010