std::move(key) 同时迭代unordered_map<字符串,字符串>?

std::move(key) while iterating over unordered_map<string, string>?

本文关键字:字符串 map lt gt unordered key move 迭代 std      更新时间:2023-10-16

以下方法安全吗?

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,在迭代时是否可以从key移动?

是和否。

不,因为它没有按照您的意图执行。unordered_map的密钥是恒常合格的。它无法从中移动。

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

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