我有一個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