首页 > 解决方案 > 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 次操作可以达到相同的结果。

谢谢!

标签: c++

解决方案


你正在寻找std::map::insert_or_assign

auto insertItr = m.insert_or_assign(text, objectPtr).first;

此函数返回迭代器和指示bool是否发生插入的 a。


推荐阅读