c++ - C++ 地图插入——替换现有元素
问题描述
所以我有一个字符串到对象的映射,我想按字母顺序维护对象。起初我做了以下事情。
const auto &insertItr = m.insert(std::pair(text, objectPtr));
因此,当我插入到地图中时,我想要插入索引,我可以通过从m.begin()
. 但是,如果键text
已经存在于映射中,那么对象不会像我想要的那样被替换,而是迭代器指向已经存在的对象,这不是我想要的。
虽然我能做到
m[text] = objectPtr;
const auto &insertItr = m.find(text);
或者
m.erase(m.find(text));
const auto &insertItr = m.insert(std::pair(text, objectPtr));
那是 2 次操作,我想知道是否有 1 次操作可以达到相同的结果。
谢谢!
解决方案
你正在寻找std::map::insert_or_assign
auto insertItr = m.insert_or_assign(text, objectPtr).first;
此函数返回迭代器和指示bool
是否发生插入的 a。
推荐阅读
- java - Importing pom in dependency management
- oracle - Oracle - '表达式类型错误'返回包中记录类型的表
- android-studio - 有没有办法避免这个错误信息?“无法解析资源@string/todo 提示:尝试刷新布局。”
- python - 如何根据数据框中的条件计算实例
- scope - 在 if 语句中使用全局声明(Julia 代码)
- twitter-bootstrap - 一些字形图标不显示
- python - 如何改变随机乌龟的颜色?
- swift - 自定义单元格中的文本混乱
- java - 从匿名内部类中返回包含在其中的方法的数据
- game-physics - 如何在虚幻引擎 4 中创建简单的肢解