【发布时间】:2013-01-12 22:26:59
【问题描述】:
我有一个(相当)简单的键类型和复杂的映射类型的地图,如下所示:
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
【问题讨论】:
-
问题是,您要将映射类型移动到哪里?它不会存在于地图中,除非您之前在那里创建过。
-
只使用指针作为映射值可能更容易?
-
@TonyTheLion -
vector有一个移动构造函数,对吧?我希望地图中的pair<string, vector>具有通过 move 构造的矢量部分。 -
@billz - 什么,手动处理内存分配处理?不用了,谢谢。在
mapped超出范围之后很久,我将引用myMap。 -
map<string,unique_ptr<vector<string>>> myMap,你不需要手动alloc-dealloc
标签: c++ map move-semantics