0

我正在使用一个std::multimap

std::multimap<string,string> map;

它包含以下元素

1 2  
2 3
3 2
1 2
1 0

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

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 循环。还有其他方法可以摆脱这种情况吗?

4

2 回答 2

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);
}
于 2013-02-25T13:25:49.487 回答
0

您在迭代容器时正在修改容器,这很糟糕。

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

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

于 2013-02-25T13:12:11.617 回答