c++ - 插入或更新 map

标签 c++

我有一个 std::map .给出 <key, value>对,我需要:

  • 如果键存在则修改映射中的值,或者
  • 如果 key 不存在,则将对插入到映射中。

我是这样做的:

if (map.find(key) == map.end()){
    map.insert(std::pair<int, char>(key, value));
}
else {
    map[key] = value;
}

这种做法对吗?另外,是否有更快或更惯用的方法来执行此操作?

最佳答案

有多种策略。

最简单的就是使用operator [] :

map[key] = value;

但是它需要 value默认可构造可赋值。此外,由于发生了这些操作,它们可能(在某些情况下)导致性能问题。

另一种解决方案:

auto const result = map.insert(std::make_pair(key, value));
if (not result.second) { result.first->second = value; }

如果您更新,您当然也会承担分配成本,但如果插入有效,则避免它。

作为引用,insert的返回值是std::pair<iterator, bool>产生 iterator到插入或找到的元素,一个 bool 值指示插入是否成功(true)或不成功(false)。

关于c++ - 插入或更新 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21463928/

相关文章:

c++ - 二维 vector 访问

c++ - 虚函数不工作

c++ - 如何将具有双高/双宽字符的字符串转换为普通字符串[VC++6]

c++ - 如何解决 Visual C++ 200 5's "修饰名称长度超出,名称被截断“警告?

c++ - 我如何找到 C++ 编译器认为定义为常量的内容?

各种类型指针的 C++ 容器

c++ - 为什么c++中允许int a[0]?

c++ - 带有 C++ 组的 VS 2012 include/lib

c++ - 如何初始化 std::array<std::array<T, 2>, 2> 的对象?

c++ - 仅当它为负时才摆弄 : Negate an int,