c++ unordered_map用emplace,当键已经存在时会报错吗
时间: 2023-07-18 17:36:33 浏览: 190
unordered-map的使用方法.rar
使用 `emplace` 函数向 `unordered_map` 中插入元素时,如果键已经存在,则不会插入新的键值对,也不会报错。这是因为 `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) {
std::cout << "apple is newly inserted." << std::endl;
} else {
std::cout << "apple already exists, value is " << result1.first->second << "." << std::endl;
}
if (result2.second) {
std::cout << "watermelon is newly inserted." << std::endl;
} else {
std::cout << "watermelon already exists, value is " << result2.first->second << "." << std::endl;
}
return 0;
}
```
输出结果为:
```
apple already exists, value is 1.
watermelon is newly inserted.
```
可以看到,使用 `emplace` 插入已存在的键时,并不会报错,而是返回指向已存在元素的迭代器。
阅读全文