你应该在手机里搜过联系人,你是怎样搜索的?是从头到尾一个个翻,还是直接输入名字的首字母,瞬间跳到结果。后者就是哈希表。
哈希表是什么?
哈希表以键值对的形式存储数据,查找任意一个值的时间是O(1)--也就是说,不管数据有多大,查找速度都是一下子的。 在C++里,最常用的哈希表是unordered_map:

为什么这么快?
哈希函数把key(比如"Zfy")转换成一个索引数字。怎么转换的?通过哈希函数,哈希函数计算得到索引数字。值就存在这个索引对应的数组位置上。查找的时候直接根据索引取值,不需要一个个遍历。
"Zfy" -> 哈希函数 -> 索引42 -> 值:12345678
"yfz" -> 哈希函数 -> 索引7 -> 值:87654321
就像你知道书在图书馆的哪个架子上,直接走过去拿,不用一排排地找。这就是大O(1)。
哈希表能解决的问题
查找 / 是否存在 / 计数 / 重复 / 分组