按键更改std::multimap中多个元素的值
change values of multiple elements in std::multimap by key
我正在使用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);
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 使用std::multimap迭代器创建std::list
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 哪个元素将从 std::multimap::find 返回,同样,std::multiset::find
- 使用 std::multimap,是否可以保证 begin() 方法返回最新的元素
- 为迭代multimap的某些元素设计operator++
- 从multimap中完全删除元素(c++)
- 按键更改std::multimap中多个元素的值
- std::multimap 如何存储其元素
- 如何在c++中对multimap中具有相同键的所有元素求和
- 从from std::multimap中删除元素时的特殊行为