2016-12-28 39 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

相关问题