std::move(key) 在遍历 unordered_map<string, string> 时?

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

以下安全吗?

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 时从 key 移动吗?

是也不是。

否,因为它不符合您的预期。 unordered_map 的键是 const 限定的。无法移动。

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

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