C++ 插入或更新地图

C++ 插入或更新地图,c++,C++,我有一张std::map。给定对,我需要: 如果键存在,请修改映射中的值,或 如果密钥尚不存在,请将该对插入到映射中 我是这样做的: if (map.find(key) == map.end()){ map.insert(std::pair<int, char>(key, value)); } else { map[key] = value; } if(map.find(key)=map.end()){ insert(std::pair(key,value));

我有一张
std::map
。给定
对,我需要:

  • 如果键存在,请修改映射中的值,或
  • 如果密钥尚不存在,请将该对插入到映射中
我是这样做的:

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

这样做对吗?还有,有没有更快或更惯用的方法来实现这一点?

有多种策略

最简单的方法就是使用
操作符[]

map[key] = value;
但是它要求
是默认的可构造和可分配的。此外,由于这些操作发生,它们可能(在某些情况下)导致性能问题

另一个解决方案:

auto const result = map.insert(std::make_pair(key, value));
if (not result.second) { result.first->second = value; }
当然,如果您进行更新,您也会产生分配成本,但如果插入有效,请避免


作为参考,
insert
的返回值是
std::pair
,它为插入或找到的元素生成一个
迭代器
,布尔值指示插入是否成功(
true
)。

map[key]=value;是否足够
操作员[]
将进行插入,如果密钥不存在,如何根据给定的要求避免分配成本?这实际上是您的问题,“如果您更新,也会产生分配成本”,为什么要产生无法避免的事?@Slava:对不起,但我不理解您的第二个评论;英语似乎不是你的第一语言,也不是我的第一语言:/