2016-12-28 40 views
-2
std::multimap<int,std::string> mymap; 
mymap.emplace(1, "hello "); 
mymap.emplace(1, "world!"); 
std::cout << mymap.size() << "\n"; 

這回聲1或2?也就是說,我可以使用emplace將新對添加到multimap中,而不會影響具有相同密鑰的舊對。std :: multimap :: emplace覆蓋舊的密鑰嗎?

+0

[std :: multimap :: emplace]的文檔(http://en.cppreference.com/w/cpp/container/multimap/emplace)在其操作過程中似乎很清楚。開頭的句子「插入一個新的元素到用給定的參數構建的容器中」並沒有留下任何想象,而是與['std :: map :: emplace'](http:// en。 cppreference.com/w/cpp/container/map/emplace)缺少任何先驗元素限定符。 – WhozCraig

+0

此外,問題 - 什麼會'cout'產生?,當你可以很容易地檢查它自己,是很奇怪的...... – zoska

回答

0

通過試用http://cpp.sh/該輸出2,emplace不會用相同的密鑰覆蓋舊的配對。

0

最好自己檢查一下。從定義std::multimap允許有不同的值相同的密鑰,std::map不允許。輸出是:2,所以它允許在multimap中的同一個鍵下有2個不同的值。

IdeONE:https://ideone.com/eRkBmV

0

[associative.reqmts/4(重點煤礦):

的關聯容器支持唯一關鍵字,如果它可以包含用於每個鍵最一種元素。否則,它支持相同的密鑰。 set和map類支持唯一鍵; multiset和multimap類支持等效鍵。對於多集和multimap,插入佈設,並刪除保留相當的要素

的相對順序事實上multimap整點是能夠將多個存儲元件使用相同的密鑰,而不是map

+0

我認爲這個問題的結果是誤解'emplace'在這種情況下意味着什麼。我認爲OP沒有意識到'emplace'實際上是'insert',但是具有C++ 11語義。 – zoska

相關問題