C++ unordered_map emplace
时间: 2023-08-17 18:14:09 浏览: 294
unordered_map emplace是一个用于向无序映射表(unordered_map)中插入元素的函数。该函数会在无序映射表中寻找相应的键,如果找到则修改其对应的值,否则新建一个键值对加入到无序映射表中。与insert函数相比,emplace函数不需要创建额外的临时对象,因此可以更高效地操作无序映射表。
相关问题
c++ unordered_map emplace当键存在时,进行替换
使用 `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` 插入已存在的键时,并不会插入新元素,而是返回指向已存在元素的迭代器。我们可以使用该迭代器来修改键对应的值,实现替换操作。
unordered_map的emplace_back
`std::unordered_map`是C++标准库中的一个关联容器,提供了快速的键-值映射。`emplace_back`是一个向`std::unordered_map`中添加元素的方法。
然而,请注意,`emplace_back`是用于向容器类似于`std::vector`这样的序列容器添加元素的方法,并不适用于`std::unordered_map`。对于`std::unordered_map`,我们应该使用`emplace`或者`insert`方法来插入元素。
例如,可以使用`emplace`方法来插入元素:
```cpp
std::unordered_map<int, std::string> myMap;
myMap.emplace(1, "Hello");
myMap.emplace(2, "World");
```
或者使用`insert`方法:
```cpp
std::unordered_map<int, std::string> myMap;
myMap.insert(std::make_pair(1, "Hello"));
myMap.insert(std::make_pair(2, "World"));
```
以上两种方法都可以向`std::unordered_map`中插入元素。需要注意的是,如果键已经存在于`std::unordered_map`中,那么插入操作将不会执行,并且不会修改现有的键-值对。
希望这个回答能解决你的问题!如果还有其他问题,请随时提问。
阅读全文