c++ unordered_map emplace当键存在时,进行替换
时间: 2023-07-07 07:42:58 浏览: 515
C++11 unordered_map与map(插入,遍历,Find)效率对比。
使用 `emplace` 函数向 `unordered_map` 中插入元素时,如果键已经存在,则不会插入新的键值对,而是返回一个指向已存在元素的迭代器。如果需要替换已存在键的值,可以使用该迭代器来修改键对应的值。
以下是一个示例代码:
```c++
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> myMap = {
{"apple", 1},
{"banana", 2},
{"orange", 3}
};
// 使用 emplace 插入新元素或替换已存在元素
auto result1 = myMap.emplace("apple", 4); // 不会插入新元素,返回指向已存在元素的迭代器
auto result2 = myMap.emplace("watermelon", 5); // 会插入新元素
// 替换已存在键的值
if (!result1.second) {
result1.first->second = 4;
}
// 输出结果
std::cout << "myMap:" << std::endl;
for (const auto& pair : myMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
```
输出结果为:
```
myMap:
apple: 4
banana: 2
orange: 3
watermelon: 5
```
可以看到,使用 `emplace` 插入已存在的键时,并不会插入新元素,而是返回指向已存在元素的迭代器。我们可以使用该迭代器来修改键对应的值,实现替换操作。
阅读全文