我正在使用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循环。还有其他方法吗?
答案 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);
}