STL中的用哈希表实现的容器

一、容器类型

使用哈希表需要包含头文件  #include <unordered_map>

哈希容器都是基于哈希表实现的,提供了快速的平均时间复杂度的插入、删除和查找操作。它们通常比有序容器(如 std::set 和 std::map)在这些操作上更高效。哈希容器的元素顺序是不确定的,因为元素在容器中的存储顺序取决于哈希函数的计算结果。

二、容器常用的函数

这些成员函数能够对哈希容器进行插入、查找、删除等操作,以及提供了一些信息查询功能,帮助用户更灵活地使用哈希容器。

  • unordered_set: 无序集合,容器中的元素是唯一的,按照哈希值进行存储,具有常数时间复杂度的查找、插入和删除操作。

  • unordered_map: 无序映射,存储键-值对,按照键的哈希值进行存储,也具有常数时间复杂度的查找、插入和删除操作。

  • unordered_multiset: 无序多重集合,允许存储相同元素的集合,按照哈希值进行存储。

  • unordered_multimap: 无序多重映射,允许存储具有相同键的键-值对,按照键的哈希值进行存储。

  • insert(): 用于将元素插入到哈希容器中。对于单值的容器(set、map),insert() 方法返回一个 pair 类型,包含一个迭代器指向插入的元素及一个 bool 值,用于表示插入是否成功;对于多重容器(multiset、multimap),则直接返回迭代器。

  • find(): 在容器中查找指定的元素,返回指向该元素的迭代器,若未找到则返回尾后迭代器。

  • erase(): 从容器中删除一个或一段元素,可以传入元素或迭代器作为参数。

  • clear(): 清空容器中所有元素,使其变为空容器。

  • size(): 返回容器中元素的数量。

  • empty(): 检查容器是否为空,如果容器没有元素,则返回 true;否则返回 false。

  • begin() 和 end(): 返回指向容器第一个元素和尾后元素的迭代器,通常用于循环遍历容器中的元素。

  • bucket_count(): 返回当前哈希表中的桶数。

  • bucket_size(n): 返回第 n 个桶中存储的元素数。

  • load_factor(): 返回当前容器中元素的数量与桶数的平均比值。

  • rehash(): 重新散列容器,增加桶的数量以适应更多元素,可能会导致重新分配元素的操作。

  • reserve(): 设置容器最少可以容纳的元素数量,以提高插入元素时的性能。

三、unordered_map和map用法

如果要在c++ 中使用这map 和unordered_map 两个函数,需要分别引入下面的两个头文件

#include<map>
#include<unordered_map>

unordered_map 容器,直译过来就是"无序 map 容器"的意思。所谓“无序”,指的unordered_map 容器不会像 map 容器那样对存储的数据进行排序。换句话说,unordered_map 容器和 map 容器仅有一点不同,即 map 容器中存储的数据是有序的,而 unordered_map 容器中是无序的。unordered_map是一个将key和value关联起来的容器,它可以高效的根据单个key值查找对应的value。
key值应该是唯一的,key和value的数据类型可以不相同。
unordered_map存储元素时是没有顺序的,只是根据key的哈希值,将元素存在指定位置,所以根据key查找单个value时非常高效,平均可以在常数时间内完成。
unordered_map查询单个key的时候效率比map高,但是要查询某一范围内的key值时比map效率低。可以使用[]操作符来访问key值对应的value值。

详细了解https://blog.csdn.net/jpc20144055069/article/details/108170073

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值