如何修改std :: map容器中的键值

Jus*_*cle 7 c++ stdmap

特定

std::map<int,std::string> myMap;
fillMyMapWithStuff(myMap);

// modify key values - I need to add a constant value to each key
for (std::map<int,std::string>::iterator mi=myMap.begin(); mi != myMap.end(); ++mi)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

什么是一个好方法应用一些重新索引?我必须删除旧条目并使用新密钥和旧值添加新条目吗?

Ale*_*nov 8

看起来你最好建立一个新地图并在之后交换它.您将只有n插入操作而不是n删除和n插入.


Cub*_*bbi 5

是的,您必须删除旧条目并使用新密钥添加新条目.密钥不可修改.

如果您只修改一个或几个元素,则可以通过提示map::insert新元素的位置来有效地执行此操作.由于您的新密钥肯定位于旧密钥之后的某个位置,因此您可以使用指向旧元素的迭代器进行提示.但是,您必须注意不要重新评估新插入的键(例如,通过迭代从头到尾),并且在修改整个映射的情况下,构建新映射更有效.