unordered_map哈希表

1、哈希表概念

哈希表存储的是由键(key)和值(value)组成的数据。

哈希表就是在关键字和存储位置之间建立对应关系,使得元素的查找可以以O(1)的效率进行, 其中关键字和存储位置之间是通过散列函数建立关系,记为:Loc(i)=Hash(Keyi)

2、STL库中的哈希表

2.1 头文件

#include<unordered_map> 

2.2 哈希表的声明和初始化

1、声明

语法:unordered_map<elemType_1, elemType_2> var_name

  • elemType_1表示键Key的数据类型
  • elemType_2表示值Value的数据类型
  • var_name表示声明的哈希表容器的名称

2、初始化

#1、在定义哈希表的时候通过初始化列表中的元素初始化
unordered_map<int, int> hash{ {1,10},{2,12},{3,13} };

#2、通过其他已初始化的哈希表来初始新的哈希表
unordered_map<int, int> newHash(hash);

#3、定义空哈希表
unordered_map<int, int> hashNull;

3、添加新的元素

unordered_map<int, int> 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<<hash[4]<<endl;      //输出15

/*
2、通过insert()函数来添加元素
通过insert()函数来添加元素的结果和通过下标来添加元素的结果一样,不同的是insert()可以避免覆盖问题
insert()函数在同一个key中插入两次,第二次插入会失败
*/
hash.insert({ 5,15 });
hash.insert({ 5,16 });
cout << hmap[5];  //结果为15

2.3 STL中哈希表的常用函数

1、begin( )函数:该函数返回一个指向哈希表开始位置的迭代器

//申请迭代器,并初始化为哈希表的起始位置
unordered_map<int, int>::iterator iter = hash.begin();

2、end( )函数:作用于begin函数相同,返回一个指向哈希表结尾位置的下一个元素的迭代器

3、cbegin() 和 cend():这两个函数的功能和begin()与end()的功能相同,唯一的区别是cbegin()和cend()是面向不可变的哈希表

const unordered_map<int, int> hmap{ {1,10},{2,12},{3,13} };
unordered_map<int, int>::const_iterator iter_b = hmap.cbegin(); 
//注意这里的迭代器也要是不可变的const_iterator迭代器
unordered_map<int, int>::const_iterator iter_e = hmap.cend();

4、empty()函数:判断哈希表是否为空,空则返回true,非空返回false

5、size()函数:返回哈希表的大小

6、erase()函数: 删除某个位置的元素,或者删除某个位置开始到某个位置结束这一范围内的元素, 或者传入key值删除键值对

unordered_map<int, int> hmap{ {1,10},{2,12},{3,13} };
unordered_map<int, int>::iterator iter_begin = hmap.begin();
unordered_map<int, int>::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<int, int> hmap{ {1,10},{2,12},{3,13} };
int elem = hmap.at(3);

8、clear()函数:清空哈希表中的元素

9、 find()函数:以key作为参数寻找哈希表中的元素,如果哈希表中存在该key值则返回该位置上的迭代器,否则返回哈希表最后一个元素下一位置上的迭代器。

10、哈希表的遍历: 通过迭代器遍历

unordered_map<int, int> hmap{ {1,10},{2,12},{3,13} };
unordered_map<int, int>::iterator iter = hmap.begin();
for( ; iter != hmap.end(); iter++){
 cout << "key: " <<  iter->first  << "value: " <<  iter->second <<endl;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值