std :: move (key) во время итерации по unordered_map <string, string>? - PullRequest
0 голосов
/ 29 августа 2018

Безопасно ли следующее?

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 во время итерации по нему?

1 Ответ

0 голосов
/ 29 августа 2018

Да и нет.

Нет, потому что он не делает то, что вы намереваетесь. Ключ unordered_map является константным. Его нельзя перенести из.

Да, потому что код безопасен и компилируется. Ключ просто копируется.

То же самое для всех упорядоченных и неупорядоченных ассоциативных контейнеров, включая map, set, unordered_multiset и т. Д.

...