std::unordered_map的emplace方法
时间: 2023-08-14 08:11:31 浏览: 193
C++11 unordered_map与map(插入,遍历,Find)效率对比。
`std::unordered_map` 提供了 `emplace` 方法,用于在哈希表中插入新的键值对(key-value pair)。`emplace` 方法可以直接在哈希表中构造元素,避免了额外的拷贝或移动操作,提高了效率。
`emplace` 方法有以下两种形式:
1. `emplace(key, args...)`:该形式接受键和构造参数,用于在哈希表中插入新的键值对。它会直接在哈希表中构造一个新的键值对,并将参数传递给值类型的构造函数。
```cpp
std::unordered_map<int, std::string> map;
map.emplace(1, "one");
```
2. `emplace(std::pair<Args1, Args2>&& pair)`:该形式接受一个右值引用的 `std::pair` 对象,用于在哈希表中插入新的键值对。它可以直接构造一个键值对并插入到哈希表中。
```cpp
std::unordered_map<int, std::string> map;
map.emplace(std::make_pair(1, "one"));
```
使用 `emplace` 方法可以避免不必要的拷贝或移动操作,提高了插入操作的效率。它会在指定的位置直接构造键值对,并返回一个迭代器指向插入的元素。如果插入的键已经存在,`emplace` 方法将不会进行插入操作。
需要注意的是,当使用 `emplace` 方法时,键类型和值类型需要符合要求,能够正确构造对应的元素。在构造键值对时,哈希表会根据键的哈希值将其放入对应的桶中,以提高查找效率。
阅读全文