HashMap和HashSet在日常的算法题中频繁需要使用到。为了能更加熟练地应用这两个数据结构,这里对其用法进行一定的总结。


unordered_map

初始化

1
2
unordered_map<int,int> hashmap;

插入元素

1
2
hashmap.insert(pair<int,int>(1, 10));
hashmap[1]=10;
  • 两种写法在哈希表中没有键值1时等价
  • 在哈希表中已经有键值1时,第一种写法会插入新的键值对<1,10>,而第二个写法会用键值对<1,10>覆盖原本键为10的位置。

常用函数

1
2
3
4
5
6
7
8
hashmap.begin()  // 指向哈希表的第一个容器
hashmap.end() // 指向哈希表的最后一个容器
hashmap.find(x) // 查找key为x的键值对是否存在
hashmap.count(x) // 查找哈希表中key为x的键值对,返回其数量
hashmap.size() // 返回哈希表的大小
hashmap.empty() // 判断哈希表是否为空
hashmap.clear() // 清空哈希表
hashmap.swap(m2) //交换两个哈希表中的元素,整个哈希表的键值对全部都交换过去

遍历哈希表

1
2
3
4
5
6
unordered_map<int, int> hashmap;
for (auto p : hashmap) {
int front = p.first; //key
int end = p.second; //value
}


unordered_set

初始化

1
unordered_set<int> hashset;

插入元素

1
hashset.insert(x);

常用函数

与hashmap类似

遍历哈希集合

1
2
3
4
5
std::unordered_set<int> hashset;

for (auto value : hashset) {
cout<<value;
}