我有一个STL映射。 我想更改地图中的键之一。 如何将key1替换为key2,然后将值复制到key2? map [key2] =值。
谢谢
答案 0 :(得分:1)
您无法更改地图中的键,您所能做的就是删除旧键,并使用旧值添加新键。
例如
auto value = m[key1];
m.erase(key1);
m[key2] = value;
答案 1 :(得分:0)
除了您无法更改地图中的键外,您描述的操作似乎甚至不需要此操作...如果您说要将key1
重命名为{{1} },然后将一些新的key2
放入value
中,您只需从地图上完全删除key2
并将key1
存储到插槽value
中即可。>
key2
答案 2 :(得分:0)
您不能只更改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);
}
通过将值移动到新的键位置,这应该相当有效。