?,c++,c++11,unordered-map"/>

首页 > 解决方案 > 迭代 unordered_map 时的 std::move(key)?

问题描述

以下安全吗?

unordered_map<string, string> my_map;
unordered_map<string, double> new_map;
for(auto&& [key, value] : my_map) {
    new_map.insert({std::move(key), std::stod(value)});
}

我没有my_map在循环之后使用,可以从keywhile 迭代中移动吗?

标签: c++c++11unordered-map

解决方案


是和不是。

不,因为它不符合您的意图。an 的键unordered_map是 const 限定的。它不能被移走。

是的,因为代码是安全的并且可以编译。密钥被简单地复制。

这对于所有有序和无序的关联容器都是一样的,包括mapsetunordered_multiset等。


推荐阅读