通过mapped_type的r值移动插入映射条目

时间:2013-01-29 11:03:58

标签: c++ map move-semantics

我有一个带有(相当)简单键类型和复杂映射类型的地图,如下所示:

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

1 个答案:

答案 0 :(得分:18)

您正在寻找std::map::emplace

myMap.emplace(key, move(mapped));

这会在适当的位置调用适当的std::pair构造函数:

template< class U1, class U2 >
pair( U1&& x, U2&& y );

由于第一个参数是l值,因此密钥被复制,但第二个(映射的)是一个rvalue,因此得到了移动构造。