C++ 通过移动映射类型的r值插入映射条目

C++ 通过移动映射类型的r值插入映射条目,c++,map,move-semantics,C++,Map,Move Semantics,我有一个(相当)简单的键类型和复杂的映射类型的映射,如下所示: map<string, vector<string>> myMap; map-myMap; 如果我手头有一个向量,是否可以在映射中插入一个条目,该条目复制键但移动映射值?也就是说,有什么办法可以做到: string key = "Key"; vector<string> mapped; for (int i = 0; i < 1000; ++i) mapped.push_back("

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

map<string, vector<string>> myMap;
map-myMap;
如果我手头有一个
向量
,是否可以在映射中插入一个条目,该条目复制键但移动映射值?也就是说,有什么办法可以做到:

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
string key=“key”;
向量映射;
对于(int i=0;i<1000;++i)
映射。推回(“某个动态字符串”);
//通过移动地图插入;我知道我受够了
myMap.insert(生成配对(键,移动(映射));//这似乎也移动了钥匙
您正在寻找:

这将调用适当的
std::pair
构造函数:

template< class U1, class U2 >
pair( U1&& x, U2&& y );
模板
配对(U1和x、U2和y);

因为第一个参数是l值,所以会复制键,但第二个(映射)是右值,因此会构造move。

问题是,要将映射类型移动到哪里?除非您之前在地图中创建了它,否则它不会存在于地图中。只需将指针用作地图值可能更容易?@TonyTheLion-
vector
有一个移动构造函数,对吗?我希望映射中的
的向量部分由move构造。@billz-什么,手动处理内存alloc dealloc?不用了,谢谢。在
mapped
超出范围很久之后,我将参考
myMap
mappmymap
,您不需要手动分配解除锁定
template< class U1, class U2 >
pair( U1&& x, U2&& y );