如何使用key2更新STL映射key1以及如何将值复制到key2中

时间:2019-01-06 10:28:35

标签: c++ stl

我有一个STL映射。 我想更改地图中的键之一。 如何将key1替换为key2,然后将值复制到key2? map [key2] =值。

谢谢

3 个答案:

答案 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);
}

通过值移动到新的键位置,这应该相当有效。