2015-09-03 29 views
6

C++ haritası üzerinde yineliyorum. İlk 2 dışında haritadaki mevcut tuşları almak istediğimi söyle. Tuşlar haritaya göre sıralanıyor. Dolayısıyla böyle bir şey kullanmanın düşündüm: Bu vektörler ile çalışır rağmenC++ haritalarındaki belirli bir anahtar kümesi üzerinde yineleme nasıl yapılır?

map<int, int> table; 
for(auto i = table.begin()+2; i != table.end(); i++) 
    cout<<i->first<<"\t"<<i->second<<endl; 

, bunun nedeni haritalar için uygulanıyor değil '+' operatöre haritalar içeren bir hata verir. Ortaya çıkan sonuçlardan biri şu olabilir:

auto i = table.begin(); 
int count = 0; 
while(count < 2 && i != table.end()){ 
    count++; 
    i++; 
} 
for(; i!=table.end(); i++) 
    cout<<i->first<<"\t"<<i->second<<endl; 

Bunu uygulamak için başka etkili bir yol var mı?

+0

okumak için belki biraz daha kolay; haritanın doğru veri yapısı olduğundan emin misin? C++ 'daki harita 'sırasına göre yinelenebilir olur, ama' unordered_map' ile de yapılamayan '' '' '' '' '' '' '' '' '' '' '' '' '*' '*' nin bir noktasını ' Sıralı bir dizi takım (bu daha çok ya da daha öncelikli olan "öncelik_sayısı") olmalı, ancak anahtarlardan değerlere * eşleme * olması. –

cevap

8

Hiçbir daha verimli ama bunun için bir kullanım örneği sert bir zaman düşünce biraz yaşıyorum

for (auto i = std::next(table.begin(), 2); i != table.end(); i++) 
+0

, aksi halde diğer kaplar için genelleştirileceği için yükseltilmiştir; std :: vector', std :: next’in basitçe “begin() + 2” ye delege edecek. İki nitpick: Ben 'it' adını kullanmayı tercih ediyorum ve döngü indeksleri için 'i' kullanmayı tercih ediyorum, çünkü STL tabanlı yineleyici döngüler için kullanılan insanlar için daha az şaşırtıcıdır. Ayrıca: '++ ++ 'yerine' ++ it' tercih et. – TemplateRex

İlgili konular