哈希表是数据结构中的常客,在处理数据查找、频次统计和去重任务时,往往能提供接近 O(1) 的时间复杂度。在 C++ 标准库中,std::unordered_map 和 std::unordered_set 提供了基于哈希的实现,配合 vector 或数组,能轻松解决许多高频算法题。
下面结合几个典型例题,看看它在实际编码中是怎么落地的。
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};
}
};
这里用 unordered_map 存储数值及其索引,避免了双重循环带来的 O(N²) 开销。
2. 字符排列检查
当处理字符频次统计时,可以直接使用固定大小的数组作为哈希表。对于只包含小写字母的字符串,长度为 26 的数组就足够映射所有字符。












