您的位置: 首页> C++教程> 大名鼎鼎的哈希表,真的好用吗?

大名鼎鼎的哈希表,真的好用吗?

时间:2025-09-04 14:45:01 来源:互联网

大名鼎鼎的哈希表是啥?

“我需要快速查找某个元素,它到底在不在集合里?”

你是一个常写代码和算法题的小帅,有一天你遇见了一个上面这样的问题。

假如用数组,得从头到尾遍历 → O(n)
用二叉搜索树(BST) → O(log n)

以上的方法都是很常规也很容易理解的方法。

但如果能做到 O(1) 呢?

那你就可以使用——哈希表(Hash Table)

image.png


1. 哈希表是啥?

哈希表是一种通过哈希函数,把“键”映射到数组下标,从而实现快速存取的结构。

它核心依赖两部分:

比如,你想存 "Alice" 这个名字,哈希函数可能把它算成 12345,然后对数组大小取模,落到 12345 % N 这个位置。
查找时再哈希一次,一下就跳到那个位置。


2. 哈希冲突怎么解决?

问题来了:不同的 key 可能哈希到同一个位置,这就是 冲突
哈希表的设计关键就在于如何解决冲突。下面是常见两种方案~

① 开放寻址(Open Addressing)

② 拉链法(Separate Chaining)

现代 STL 的 unordered_map 就是基于拉链法实现的。

image.png


3. 哈希表的复杂度

在理想情况下:

因此,哈希表的效率 高度依赖哈希函数负载因子(装载率)。


4. 实际应用

哈希表几乎无处不在:

image.png

如果你写业务代码,几乎每天都在用哈希表。


5. 哈希表的缺点

虽然哈希表快,但它也有局限:

  1. 无序
    元素在数组中分布杂乱,不像 BST 那样能维持顺序。
    如果你需要“区间查找”或“有序遍历”,哈希表就不适合。
  2. 内存占用高
    为了避免冲突,需要留出不少空位。装载率低时内存浪费严重。
  3. 扩容开销大
    当容量不足时,需要 rehash,即把所有元素重新分配,代价很高。

6. 小结

一般来说,你不知道怎么更快,那就无脑哈希吧~


上一篇:cpp-string::size_type的作用 下一篇:大名鼎鼎的红黑树,究竟是何方神圣?

相关文章

相关应用

最近更新