unordered_map 与 unordered_set
时间: 2025-06-27 09:04:59 浏览: 26
`unordered_map` 和 `unordered_set` 都属于 C++ 标准库中的关联容器,它们基于哈希表实现,因此提供平均常数时间复杂度的查找、插入和删除操作。
### **unordered_map**
- 它是一个键值对存储结构,类似于字典或映射。
- 每个元素由一个键(key)和一个对应的值(value)组成。
- 键是唯一的,不能有重复的键。
- 常见操作包括:
- 插入:通过 `insert()` 或直接赋值的方式添加新的键值对。
- 查找:使用下标运算符 (`[]`) 或者 `find()` 函数定位特定键的位置。
- 删除:通过 `erase()` 移除指定的键及其对应值。
**示例代码片段:**
```cpp
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> map;
map["one"] = 1; // 插入键值对
if (map.find("one") != map.end()) { // 判断是否存在并访问
std::cout << "Key 'one': " << map["one"] << '\n';
}
}
```
---
### **unordered_set**
- 只存储唯一的关键字集合。
- 关键字本身即为其数据内容,并且不允许存在重复项。
- 主要用作快速检测某个值是否存在于集合内的情况。
**常见操作包括:**
- 添加新成员到集合里去——可以用`emplace`, `insert`.
- 测试某成员是否已经存在——可以采用`count`, `find`.
**示例代码片段:**
```cpp
#include <iostream>
#include <unordered_set>
int main(){
std::unordered_set<int> mySet{42,7,-5};
for(auto const& elem : mySet){
std::cout << elem << "\t"; // 输出所有元素
}
bool exists=mySet.count(-5); //检查是否有-5这个数值
std::cout<<"\nExists? "<<exists;//打印结果
}
```
---
两者都利用了内部散列机制来保证高效性能。然而,在实际应用当中需要特别留意冲突处理以及负载因子等因素可能带来的影响。
阅读全文
相关推荐


















