我有一个std::map
。给定一个<key, value>
对,我需要:插入或更新地图
- 在地图修改的值,如果键不存在,或者
- 插入一进图如果该键不存在。
我做这样的:
if (map.find(key) == map.end()){
map.insert(std::pair<int, char>(key, value));
}
else {
map[key] = value;
}
这样做是正确的这种方式?另外,有没有更快或更习惯的方式来做到这一点?
我有一个std::map
。给定一个<key, value>
对,我需要:插入或更新地图
我做这样的:
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
到插入或找到的元件,和一个布尔表示的插入件是否成功(true
)否(false
)。
map [key] = value;足够 – IdeaHat
如果密钥不存在,运算符[]'将执行插入操作 – eduffy