哈希表存储的是由键(key)和值(value)组成的数据。
哈希表就是在关键字和存储位置之间建立对应关系,使得元素的查找可以以O(1)的效率进行, 其中关键字和存储位置之间是通过散列函数建立关系,记为:Loc(i)=Hash(Keyi)
#include
语法:unordered_map
#1、在定义哈希表的时候通过初始化列表中的元素初始化
unordered_map hash{ {1,10},{2,12},{3,13} };
#2、通过其他已初始化的哈希表来初始新的哈希表
unordered_map newHash(hash);
#3、定义空哈希表
unordered_map hashNull;
unordered_map hash{ {1,10},{2,12},{3,13} };
//1、通过下标来添加元素
/*
当我们想向哈希表中添加元素时也可以直接通过下标运算符添加元素,格式为: hash[key]=value;
例如hash[4]=15
但是这样的添加元素的方式会产生覆盖的问题,也就是当hash中key为4的存储位置有值时,
再用hash[4]=15添加元素,会将原哈希表中key为4存储的元素覆盖
*/
hash[4]=14;
hash[4]=15;
cout<
1、begin( )函数:该函数返回一个指向哈希表开始位置的迭代器
//申请迭代器,并初始化为哈希表的起始位置
unordered_map::iterator iter = hash.begin();
2、end( )函数:作用于begin函数相同,返回一个指向哈希表结尾位置的下一个元素的迭代器
3、cbegin() 和 cend():这两个函数的功能和begin()与end()的功能相同,唯一的区别是cbegin()和cend()是面向不可变的哈希表
const unordered_map hmap{ {1,10},{2,12},{3,13} };
unordered_map::const_iterator iter_b = hmap.cbegin();
//注意这里的迭代器也要是不可变的const_iterator迭代器
unordered_map::const_iterator iter_e = hmap.cend();
4、empty()函数:判断哈希表是否为空,空则返回true,非空返回false
5、size()函数:返回哈希表的大小
6、erase()函数: 删除某个位置的元素,或者删除某个位置开始到某个位置结束这一范围内的元素, 或者传入key值删除键值对
unordered_map hmap{ {1,10},{2,12},{3,13} };
unordered_map::iterator iter_begin = hmap.begin();
unordered_map::iterator iter_end = hmap.end();
hmap.erase(iter_begin); //删除开始位置的元素
hmap.erase(iter_begin, iter_end); //删除开始位置和结束位置之间的元素
hmap.erase(3); //删除key==3的键值对
7、at()函数:根据key查找哈希表中的元素
unordered_map hmap{ {1,10},{2,12},{3,13} };
int elem = hmap.at(3);
8、clear()函数:清空哈希表中的元素
9、 find()函数:以key作为参数寻找哈希表中的元素,如果哈希表中存在该key值则返回该位置上的迭代器,否则返回哈希表最后一个元素下一位置上的迭代器。
10、哈希表的遍历: 通过迭代器遍历
unordered_map hmap{ {1,10},{2,12},{3,13} };
unordered_map::iterator iter = hmap.begin();
for( ; iter != hmap.end(); iter++){
cout << "key: " << iter->first << "value: " << iter->second <