按键更改std :: multimap中多个元素的值

时间:2013-02-25 13:08:44

标签: c++ multimap

我正在使用std::multimap

std::multimap<string,string> map;

它包含以下元素

1 2  
2 3
3 2
1 2
1 0

我想用X替换所有的1和2。我在 google 中搜索了很长时间,但没有得到结果。我试过像

for(it=mmap.begin();it!=mmap.end();it++)
{
   if(it->first == "1" || it->first == "2")
   {
     key = it->second;
     it.erase(it);
     mmap.insert(pair<string,string>("X",key));
   }
}

但最终导致错误的结果。据我所知,每次插入元素时,大小都会变化,最后插入元素,然后结束for循环。还有其他方法吗?

2 个答案:

答案 0 :(得分:0)

你在迭代它时修改容器,这很糟糕。

我建议您存储要替换的所有值,删除它们,然后放回所需的所有值。

或者只是创建具有所需值的新地图

答案 1 :(得分:0)

  
    

据我所知,每次插入元素的大小都会在最后插入

  

不,它没有,它将新元素插入到保持排序的位置。

你需要做的就是这个。

// for "1"
while (auto I = mmap.lower_bound ("1"), I != mmap.end())
{
    mmap.insert(pair<string,string>("X",I->second));
    mmap.erase (I);
}

// Same for "2"
while (auto I = mmap.lower_bound ("2"), I != mmap.end())
{
    mmap.insert(pair<string,string>("X",I->second));
    mmap.erase (I);
}