2010-01-22 18 views
15

Değerleri, o anahtar gerekli diğer değerlere haritalama olabileceğinden, tüm anahtarı kaldırmak istemiyoruz. Herhangi bir yardım için lütfenSTL Multimap Kaldır/Sil ben belirli bir değere sahip haritadan girdileri kaldırmak istediğiniz, STL Multimap'de var

.

+1

Olası bir düzeltme anahtarlarını ve değerlerini takas olabilir:

Yani yerel erase_iter değişken tanıtmak gerek kalmadan Nikola'nın cevabı biraz daha temiz yeniden yazabilirsiniz Bu, tüm bunları okumak için bir seçenek olmayabilir, ancak bazıları için olabilir. – dangerousdave

cevap

14

Ben bu değerler hiçbir anahtarının altında görünebilir doğru anlamak. Eğer durum buysa, multimap üzerinde yinelemek ve belirli değerleri silmek zorunda kalacaksınız.

typedef std::multimap<std::string, int> Multimap; 
Multimap data; 

for (Multimap::iterator iter = data.begin(); iter != data.end();) 
{ 
    // you have to do this because iterators are invalidated 
    Multimap::iterator erase_iter = iter++; 

    // removes all even values 
    if (erase_iter->second % 2 == 0) 
     data.erase(erase_iter); 
} 
+0

Evet, doğru, değerler herhangi bir tuş altında görünebilir. Bu benim için çalışıyor – Avinash

+0

teşekkürler, ben remove_if algoritmaları kullanarak arıyordu. '* It1 = * it2' yapıyor - (son olarak optimum altı hariç vektör, deque, liste) – Avinash

+0

Ben sadece değerlerini yeniden atamak mümkündür konteynerler için çalışıyor' remove_if' ' gelen' korkuyorum. Bu, siparişi bozabileceğinden, harita için mümkün değildir. – UncleBens

1

C++ 11 std::multimap::erase döner son kaldırılan elemanı takip eden bir yineleyici yana.

typedef std::multimap<std::string, int> Multimap; 
Multimap data; 

for (Multimap::iterator iter = data.begin(); iter != data.end();) 
{ 
    // removes all even values 
    if (iter->second % 2 == 0) 
     iter = data.erase(iter); 
    else 
     ++iter; 
} 

(ayrıca this question cevabına bakınız)