我有一个带有(相当)简单键类型和复杂映射类型的地图,如下所示:
map<string, vector<string>> myMap;
如果我手头有vector<string>
,是否可以在地图中插入一个复制密钥但移动映射值的条目?也就是说,有一些方法可以做:
string key = "Key";
vector<string> mapped;
for (int i = 0; i < 1000; ++i)
mapped.push_back("Some dynamic string");
// Insert by moving mapped; I know I'm done with it
myMap.insert(make_pair(key, move(mapped))); // This seems to move key too
答案 0 :(得分:18)
您正在寻找std::map::emplace
:
myMap.emplace(key, move(mapped));
这会在适当的位置调用适当的std::pair
构造函数:
template< class U1, class U2 >
pair( U1&& x, U2&& y );
由于第一个参数是l值,因此密钥被复制,但第二个(映射的)是一个rvalue,因此得到了移动构造。