2016-04-11 36 views
0

Haritamın böyle tanımlanır:Silme tuşu, C değeri ile haritadan değer ++

map<string, map<string, string>> _map; 

Ama geldi sorun benim haritası ilk yani çoğunlukla

_map["key1"]["value1"] = "data1"; 
_map["key1"]["value2"] = "data2"; 
_map["key1"]["value3"] = "data3"; 
_map["key1"]["value4"] = "data4"; 
_map["key2"]["value5"] = "data5"; 
aynı değer olmasıdır o çift girişler çünkü

Yani yineleyici için ("key1 dizesini") Ben _map.find kullanamaz, herhangi bir (anahtar, değer) silmek istediğinizde.

Yineleyici dizini değeri kullanarak ayarlamak için bir yol var mı?

varsayalım ben bu girdiyi silmek istiyorum:

_map["key1"]["value4"] = "data4"; 

Bunu nasıl yapardın?

+0

Sorunuz açık değil. Görünüşe göre, bir öğeyi haritadan nasıl çıkaracağınız soruluyor; Çözmeyi denediğiniz sorunun ne olduğunu açıklayabilir misiniz? – juanchopanza

+0

Haritada anahtar başına birden fazla değeriniz olamaz. –

+0

@ F.Franzen: Anahtar başına birden fazla değere sahip değil. yakından bak! – Nawaz

cevap

2

Navaz cevabı doğrudur:

BTW, siz haritanın başlatma artırabilir. Ancak, bir zayıflık var: "value5" silerseniz, _map["key2"] hala boş bir map<string, string> içerir. Muhtemelen niyetin bu değil.

Bunu düzeltmek için, söz konusu yöntemi pair şablonu kullanmak ve _map türünü değiştirebilirsiniz: Sonra her girişi kaldırabilir

_map[make_pair("key1", "value1")] = "data1"; 
_map[make_pair("key1", "value2")] = "data2"; 
_map[make_pair("key1", "value3")] = "data3"; 
_map[make_pair("key1", "value4")] = "data4"; 
_map[make_pair("key2", "value5")] = "data5"; 

: gibi

map<pair<string, string>, string> _map; 

Görevleriniz sonra görünecektir gibi:

_map.erase(make_pair("key1", "value4")); 

başlığındatürü.

+0

Verileri hala nasıl olsa da, onun yerine aynı şekilde düzenlenir mi? Soruyorum çünkü gerçekten bilmiyorum. – Stephen

+0

Evet, yapardı.std :: pair ', ilk koordinatın ardından ilk olarak hangi siparişin ardından ikinci bir karşılaştırmayı tanımlar. –

+0

Silme bana bir hata veriyor. Parametreyi tanımıyor. Bunu böyle silemiyorum. Ayrıca bir const çifti geçmeyi denedim, hala çalışmıyor. –

3

Sadece erase o: anahtarı bu durumda 0 değerini döndürür — yoksa o istisna olmadığını

_map["key1"].erase("value4"); 

Not.

std::map<std::string, std::map<std::string, std::string>> _map 
{ 
    {"key1", { 
       {"value1", "data1"}, 
       {"value2", "data2"}, 
       {"value3", "data3"}, 
       {"value4", "data4"} 
      } 
    }, 
    {"key2", { 
       {"value5", "data5"} 
      } 
    } 
};