通过插入的mapped_type R值移动地图入口(Insert map entry by r-va

2019-08-08 16:44发布

我有一个(相当)简单的按键式和复杂的映射类型,像这样的地图:

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

Answer 1:

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

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

这就叫此时,相应std::pair就地构造函数:

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

由于第一个参数是一个L值,密钥被复制,但是第二(映射)是一个右值,从而获取移动 - 构成。



文章来源: Insert map entry by r-value moving of mapped_type