std::unordered_map如何插入和查询
时间: 2024-09-20 20:02:56 浏览: 37
C++11 unordered_map与map(插入,遍历,Find)效率对比。
`std::unordered_map`是C++标准库中的关联容器,用于存储键值对,其特点是查找速度快(平均时间复杂度为O(1)),但插入和删除的时间复杂度为O(1)到O(n)之间,取决于哈希表的装载因子。下面是插入和查询的基本步骤:
1. **插入(Insertion)**:
- 创建一个`std::unordered_map`实例,例如:
```cpp
std::unordered_map<std::string, int> myMap;
```
- 使用`insert`或`emplace`方法添加元素。`insert`接受一个键值对作为参数,如果键已经存在,将替换旧的值;`emplace`则可以在构造时直接在内部创建新元素,不检查键是否存在:
- 插入已存在的键值对:
```cpp
myMap.insert({"key", value});
```
- 使用`emplace`根据键新建元素:
```cpp
myMap.emplace("key", value);
```
2. **查询(Querying)**:
- 通过键来获取对应的值,可以使用`find`方法:
```cpp
auto it = myMap.find("key");
if (it != myMap.end()) {
int val = it->second; // 如果找到,则val就是对应键的值
} else {
std::cout << "Key not found." << std::endl;
}
```
- 如果不确定键是否存在于映射中,也可以使用`count`方法检查键的数量,`equal_range`方法返回一个包含所有匹配键的范围。
需要注意的是,为了保持良好的性能,`std::unordered_map`依赖于哈希函数,所以键必须具有可哈希性。如果键类型不支持默认的哈希函数,你需要提供一个自定义的hash函数和等价操作符重载。
阅读全文