小工具知识网

当前位置: 首页 > 行业知识 > 个人哈希表笔记

行业知识

个人哈希表笔记

2026-11-05 07:11:26 来源:互联网转载

前言:

��为本人正在学习C++,所以这个笔记只涉及哈希表的简单介绍,以及C++中unordered_map的使用方面,后续学习的更多,笔记会做的更完善。

哈希表简介

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。

    也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

    这个映射函数叫做散列函数,存放记录的数组叫做散列表。

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

进一步解释

散列函数 

因为哈希表的底层逻辑仍然是数组,那么仍然保留有数组的相关特点:连续的,有固定下标。查找元素的时间复杂度小。而哈希表的结构表面上就是键-值两个元素,打眼一看与数组好像没什么关系,但哈希表具有查找元素的高效性的原因,就是因为散列函数。

具体可以理解为,对表中key 的离散化,将其离散到固定的数组下标,再映射到value从而找到它。

从这几张图就可以很清楚的看到哈希表的存储方式了。

键值对

哈希表存放的就是键值对,可以通过key快速的访问value的值。 

键值对就是 key-value的组合

 

unordered_map

介绍

c++的容器——unordered_map,它是一个关联容器,内部采用的是hash表结构,拥有快速检索的功能。

特性:

  • 关联性:unordered_map是一个将key和value关联起来的容器,通过key去检索value,而不是通过绝对地址(和顺序容器不同),它可以通过键直接访问值,查找数据更为高效。 
  • 无序性:unordered_map存储元素是没有顺序的,只是根据key的哈希值, 将元素存在指定位置,所以根据key查找单个value时非常高效,平均可以在常数时间内完成。
  • key值应该是唯一的,key和value的数据类型可以不相同。
  • unordered_map查询单个key的时候效率比map高,但是要查询某一范围内的key值时比map效率低。

    使用

    构造unordered_map

    #include     //unordered_map的头文件/*构造哈希表*/unordered_map hashmap_1;     //构造空的容器unordered_map hashmap_2 = {{"apple", 1}, {"grape", 2}, {"chery", 3}};    //直接构造unordered_map hashmap_3(hashmap_2);    //复制初始化,注意:使用复制初始化,两个容器内元素的类型要相同unordered_map hashmap_4(hashmap_2.begin(), hashmap_2.end());    //范围初始化unordered_map hashmap_5["pear"] = 1;    //使用键值作为下标的形式,向表中添加元素 

    容量操作

    /*容量操作*/cout {"strawberry", 4}};pair

上一篇:C/C++ 初识string

下一篇:服务器的租用怎么样?