我有一个 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/