1. 什么是哈希表?
哈希表是一种高效的数据结构,通过一个哈希函数将键(Key)转换为数组的索引,从而快速定位对应的值(Value)。
2. 为什么用它?
查找、插入和删除操作非常高效,平均时间复杂度为 O(1)。
3. 哈希函数冲突?
哈希函数的作用是将一个数据(如数字、字符串)映射为另一个值(索引)。 在发生冲突时:
- 链地址法:每个索引位置维护一个链表,冲突的键值对存储在链表中。
- 开放寻址法:冲突时按规则(如线性探测、二次探测)寻找下一个空闲位置。
4. 哈希表实际应用?
广泛用于:
- 数据库索引:加速数据检索。
- 缓存系统(如 Redis):存储键值对以实现快速访问。
- 编程语言内置结构:如 Python 的字典(
dict)、Java 的HashMap。
5. C++ 中常用的实现
(1)unordered_set(无序集合)
C++ STL 中的一种关联容器,基于哈希表实现,用于存储唯一元素的集合。与 set 不同,它不会自动排序元素,因此插入、删除和查找操作的平均时间复杂度为 O(1)。
核心特性
- 唯一性:每个元素在集合中唯一,重复插入无效。
- 无序性:元素存储顺序由哈希函数决定,无特定排序规则。
- 高效操作:依赖哈希表,平均情况下插入、删除和查找性能接近 O(1)。
#include <unordered_set>
unordered_set<int> s;
s.insert(1);
s.insert(2);
s.erase(1);
s.find(1);
s.count(1);
s.size();
s.empty();
// 遍历
for(const auto& val : s) {
cout << val << " ";
}
常用成员函数
insert(value):插入元素,若已存在则忽略。erase(value):删除指定元素。find(value):查找元素,返回迭代器;未找到时返回end()。size():返回当前元素数量。

