文章目录
一、算法解析
有两种不同类型的哈希表:哈希集合和哈希映射。
哈希集合是集合数据结构的实现之一,用于存储非重复值。哈希映射是映射数据结构的实现之一,用于存储(key, value)键值对
哈希表的关键思想是使用哈希函数将键映射到存储桶。更确切地说,
-
插入一个新的键时,哈希函数将决定该键应该分配到哪个桶中,并将该键存储在相应的桶中;
-
想要搜索一个键时,哈希表将使用相同的哈希函数来查找对应的桶,并只在特定的桶中进行搜索。哈希表是一种使用 哈希函数组织数据,以支持快速插入和搜索的数据结构。
负载因子:负载因子又叫装填因子,是哈希表的一个重要参数,它反映了哈希表的装满程度。实际利用桶的个数 与 桶的总数 的比值,称为负载因子。随着插入的数据量的增加,计算机会逐渐增加桶的个数,并选择合适的哈希函数,使得数据经过映射之后能均匀地分布在桶中
二、解题模板
1、C++ 内相关API
- unordered_set 无序的set
- unordered_map 无序的map
- set 按key排序的set
- map 按key排序的map
(1)哈希集合
哈希集合是集合的实现方式之一,采用set/ unordered_set实现,它是一种存储 不重复值 的数据结构。
#include <unordered_set>
int main() {
// 1. 初始化哈希集
unordered_set<int> hashset;
// 2. 新增键
hashset.insert(3);
hashset.insert(2);
hashset.insert(1);
// 3. 删除键
hashset.erase(2);
// 4. 查询键是否包含在哈希集合中
if (hashset.count(2) <= 0) {
cout << "键 2 不在哈希集合中" << endl;
}
// 5. 哈希集合的大小
cout << "哈希集合的大小为: " << hashset.size() << endl;
// 6. 遍历哈希集合
for (auto it = hashset.begin(); it != hashset.end(); ++it) {
cout << (*it) << " ";
}
cout << "在哈希集合中" << endl;
// 7. 清空哈希集合
hashset.clear();
// 8. 查看哈希集合是否为空
if (hashset.empty()) {
cout << "哈希集合为空!" << endl;
}
}
(2)哈希映射
哈希表的操作:哈希表 是用来存储 (key, value) 键值对的一种实现。用map/unordered_map实现
#include <unordered_map>
int main() {
// 1. 初始化哈希表
unordered_map<int, int> hashmap;
// 2. 插入一个新的(键,值)对
hashmap.insert(make_pair(0, 0));
hashmap.insert(make_pair(2, 3));
// 3. 插入一个新的(键,值)对,或者更新值
hashmap[1] = 1;
hashmap[1] = 2;
// 4. 获得特定键对应的值
cout << "The value of key 1 is: " << hashmap[1] << endl;
// 5. 删除键
hashmap.erase(2);
// 6. 检查键是否存在于哈希表中
if (hashmap.count(2) <= 0) {
cout << "键 2 不在哈希表中" << endl;
}
// 7. 哈希表的大小
cout << "哈希表的大小为: " << hashmap.size() << endl;
// 8. 遍历哈希表
for (auto it = hashmap.begin(); it != hashmap.end(); ++it) {
cout << "(" << it->first << "," << it->second << ") ";
}
cout << "在哈希表中" << endl;
// 9. 清空哈希表
hashmap.clear();
// 10. 检查哈希表是否为空
if (hashmap.empty()) {
cout << "哈希表为空!" << endl;
}
}
2、使用哈希集合查重
由于哈希集合中的元素是 不重复的,因此可以使用哈希集合来判断是否包含重复元素。伪代码模板:
//使用哈希集合寻找重复元素的模板
bool findDuplicates(vector<Type>& keys) {
//

本文深入解析哈希表的概念和算法,包括哈希集合与哈希映射的实现,以及它们在C++中的API。通过实例探讨哈希在去重、查找、交集计算等场景的应用,并介绍哈希表设计、滑动窗口问题和键设计等问题。内容覆盖从基础到进阶,帮助读者理解并掌握哈希技术。
最低0.47元/天 解锁文章
4575

被折叠的 条评论
为什么被折叠?



