一時オブジェクトの作成 (挿入されるオブジェクトのコンストラクター/デストラクタの呼び出し) を回避するために、項目をコンテナーに追加するときにemplace
優先するC++11 の本の 1 つからの推奨事項を読んでいます。insert
しかし、オブジェクトをマップに追加する方法がいくつかあるため、少し混乱しています。
#include <iostream>
#include <string>
#include <cstdint>
#include <map>
int main()
{
std::string one { "one" };
std::string two { "two" };
std::map<uint32_t, std::string> testMap;
testMap.insert(std::make_pair(1, one)); // 1
testMap.emplace(2, two); // 2
testMap.insert(std::make_pair(3, "three")); // 3
testMap.emplace(4, "four"); // 4
using valType = std::map < uint32_t, std::string >::value_type;
testMap.emplace(valType(5, "five")); // 5
testMap.insert(valType(6, "six")); // 6
return 0;
}
そのようなコードを読んだときにすぐには見えない内部メカニズムもいくつか含まれています-完全な転送、暗黙的な変換...
マップ コンテナにアイテムを追加する最適な方法は何ですか?