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

これは1または2のエコーになりますか?つまり、同じキーを持つ古いペアに影響を与えることなく、emmapを使ってマルチマップに新しいペアを追加できますか?std :: multimap :: emplaceは古いキーを上書きしますか?

+0

[std :: multimap :: emplace'](http://en.cppreference.com/w/cpp/container/multimap/emplace)のドキュメントは、その動作の過程ではっきりとしているようです。 「指定されたargsでインプレースで構築されたコンテナに新しい要素を挿入する」という文章は、想像力にはほとんど影響を与えず、[std :: map :: emplace'](http:// en。 cppreference.com/w/cpp/container/map/emplace)には、以前の要素の修飾子がありません。 – WhozCraig

+0

さらに、あなたが簡単にあなた自身でそれを確認することができるときに、「叫び」は何を生産するのでしょうか...。 – zoska

答えて

0

http://cpp.sh/の試行では、これは2を出力します.emplaceは古いペアを同じキーで上書きしません。

0

自分で確認することをおすすめします。定義std::multimapから異なる値に対して同じキーを持つことを許可すると、std::mapはできません。出力は2なので、マルチマップの同じキーの下に2つの異なる値を持つことができます。

IdeONE:[associative.reqmts]/4(強調鉱山)からhttps://ideone.com/eRkBmV

0

:それは各キーの最大1つの元素を含んでいてもよい場合

連想コンテナは、一意のキーをサポートします。それ以外の場合は、同等のキーをサポートします。 setクラスとmapクラスは一意のキーをサポートしています。 マルチセットおよびマルチマップクラスは同等のキーをサポートしています。マルチセットとマルチマップ、挿入のために、据え付け、及びmultimapの全体のポイントはmapとは対照的に、同じキーを持つ複数の要素を格納することができるようになる実際に同等の要素

の相対的な順序を保存消去。

+0

このケースでは、「emplace」が何を意味するのかという誤解から質問が生じると思います。私はOPが 'emplace'が本当に' insert'だがC++ 11のセマンティクスであることを認識していないと思う。 – zoska

関連する問題