哈希表(Hash Table)是数据结构中常用的一种,主要用于快速统计数据频次、查重以及实现 O(1) 级别的查找。在 C++ 标准库中,我们可以利用 unordered_map、unordered_set 或者直接用数组模拟哈希表来实现这些功能。
下面通过几道经典例题来演示具体用法,看看在实际编码中如何灵活运用。
1. 两数之和
这道题要求找到两个数的下标,使它们的和等于目标值。核心思路是利用哈希表记录已遍历数字的下标,边遍历边检查补数是否存在。

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> hash;
for(int i=0; i<nums.size(); i++){
int x = target - nums[i];
if(hash.count(x)) return {hash[x], i};
hash[nums[i]] = i;
}
return {-1,-1};
}
};
这里要注意,先查后存。如果先存再查,可能会匹配到当前元素自身(虽然本题通常假设解唯一)。
2. 变位词判断
判断两个字符串是否互为变位词,本质是字符频次统计。由于只涉及小写字母,可以用定长数组代替哈希表优化空间。







