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 限定的。无法移动。
是的,因为代码是安全的并且可以编译。密钥被简单地复制了。
这对所有有序和无序的关联容器都是一样的,包括map
、set
、unordered_multiset
等
以下安全吗?
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 限定的。无法移动。
是的,因为代码是安全的并且可以编译。密钥被简单地复制了。
这对所有有序和无序的关联容器都是一样的,包括map
、set
、unordered_multiset
等