当前位置:   article > 正文

unordered_map哈希表_哈希表unordered map

哈希表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. #1、在定义哈希表的时候通过初始化列表中的元素初始化
  2. unordered_map<int, int> hash{ {1,10},{2,12},{3,13} };
  3. #2、通过其他已初始化的哈希表来初始新的哈希表
  4. unordered_map<int, int> newHash(hash);
  5. #3、定义空哈希表
  6. unordered_map<int, int> hashNull;

3、添加新的元素

  1. unordered_map<int, int> hash{ {1,10},{2,12},{3,13} };
  2. //1、通过下标来添加元素
  3. /*
  4. 当我们想向哈希表中添加元素时也可以直接通过下标运算符添加元素,格式为: hash[key]=value;
  5. 例如hash[4]=15
  6. 但是这样的添加元素的方式会产生覆盖的问题,也就是当hash中key为4的存储位置有值时,
  7. 再用hash[4]=15添加元素,会将原哈希表中key为4存储的元素覆盖
  8. */
  9. hash[4]=14;
  10. hash[4]=15;
  11. cout<<hash[4]<<endl; //输出15
  12. /*
  13. 2、通过insert()函数来添加元素
  14. 通过insert()函数来添加元素的结果和通过下标来添加元素的结果一样,不同的是insert()可以避免覆盖问题
  15. insert()函数在同一个key中插入两次,第二次插入会失败
  16. */
  17. hash.insert({ 5,15 });
  18. hash.insert({ 5,16 });
  19. cout << hmap[5]; //结果为15

2.3 STL中哈希表的常用函数

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

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

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

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

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

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

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

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

  1. unordered_map<int, int> hmap{ {1,10},{2,12},{3,13} };
  2. unordered_map<int, int>::iterator iter_begin = hmap.begin();
  3. unordered_map<int, int>::iterator iter_end = hmap.end();
  4. hmap.erase(iter_begin); //删除开始位置的元素
  5. hmap.erase(iter_begin, iter_end); //删除开始位置和结束位置之间的元素
  6. hmap.erase(3); //删除key==3的键值对

7、at()函数:根据key查找哈希表中的元素

  1. unordered_map<int, int> hmap{ {1,10},{2,12},{3,13} };
  2. int elem = hmap.at(3);

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

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

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

  1. unordered_map<int, int> hmap{ {1,10},{2,12},{3,13} };
  2. unordered_map<int, int>::iterator iter = hmap.begin();
  3. for( ; iter != hmap.end(); iter++){
  4. cout << "key: " << iter->first << "value: " << iter->second <<endl;
  5. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/955635
推荐阅读
相关标签
  

闽ICP备14008679号