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

change values of multiple elements in std::multimap by key

本文关键字:元素 multimap std      更新时间:2023-10-16

我正在使用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循环。还有别的办法吗?

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

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

或者只创建具有所需值的新映射

我知道尺寸每次都会变化,当我们插入元素时,元素会插入到的末尾

不,它没有,它在这样的位置插入一个新元素,以保持顺序。

你需要做的就是这个。

// 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);
}