C++ std::在无序映射上迭代时移动(键)<;字符串,字符串>;?

C++ std::在无序映射上迭代时移动(键)<;字符串,字符串>;?,c++,c++11,unordered-map,C++,C++11,Unordered Map,以下是安全的吗 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)}); } 无序地图我的地图; 无序地图-新地图; 对于(自动&&[key,value]:我的地图){ 新的映射

以下是安全的吗

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)});
}
无序地图我的地图;
无序地图-新地图;
对于(自动&&[key,value]:我的地图){
新的映射插入({std::move(key),std::stod(value)});
}
循环结束后,我没有使用
我的映射
,在循环过程中可以从
移动吗?

是和否

不,因为它不符合你的意愿。
无序映射的键是const-qualified。它不能从中移动

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

这对于所有有序和无序关联容器都是一样的,包括
map
set
unordered\u multiset
,等等。

std::map的情况也是这样吗?@aminoosta请参见