Вы не можете просто изменить ключ в std::map
, потому что они упорядочены по ключу, и изменение ключа, вероятно, приведет к неправильному отображению карты. По этой причине ключи const
.
Таким образом, вы должны добавить новый ключ и удалить старый. Я мог бы сделать что-то вроде этого:
template<typename Key, typename Value>
void replace_key(std::map<Key, Value>& map, Key const& key1, Key const& key2)
{
auto found = map.find(key1);
if(found == std::end(map))
throw std::runtime_error("No such key")
map.emplace(key2, std::move(found->second));
map.erase(found);
}
При перемещении значения в новую ключевую позицию это должно быть достаточно эффективным.