c++种关联容器set和unordered_set的区别和作用+hashmap的底层实现原理

c++种关联容器set和unordered_set的区别和作用

作用:
1.set和unordered_set一样,都是关联式容器,和map哈希表容器不同,要求键key和值value必须相等
2.使用set存储键值对的时候,只需要为其提供各键值对中的value值(也就是key的值)
3.存储的各个元素的值必须各不相同
4.语法上,set容器没有强制对存储元素的类型做const修饰,即set容器中存储的元素的值可以修改,但是,c++标准为了防止修改容器中元素的值,对此操作做了限制,因此用户无法修改元素值

set

1.头文件 #include
2.底层实现是平衡二叉树
3.元素自动排序,对查找元素有利,限制:不能直接改变元素值,会打乱原来正确的顺序
4.要改变元素值,要先删除该元素,再插入新元素
5.查找函数具有对数复杂度
因此适用于
1.需要排序的数据,通过前序,后序遍历或查找元素这种
2.其他平衡二叉树有但是hash没有的优点

unordered_set

1.头文件#include<unordered_set>
2.底层实现 hashtable哈希表
3.元素无序
插入,删除,查找元素的时间复杂度是常量的(除非哈希rehashing冲突)
因此适用于
1.无序不需要排序 只要元素互异
2.只要单个元素不要遍历
这个count计算元素结果只能是0,1!!!!!!

hashmap及其底层实现原理

一般哈希表都是用来快速判断一个元素是否出现在集合里,时间复杂度o(1)

哈希碰撞

两个元素映射到了同一个索引下表的位置,即哈希碰撞
解决方法 :1.拉成链式结构 2.找下一个空位,前提哈希表还有位置(哈希探测)

hash结构

在这里插入图片描述
因为底层红黑树的一定是有序的且不可更改值,一更改整棵树就错乱了,一旦有序,就需要遍历,复杂度logn,而底层为hashmap的一定无序,无需遍历,复杂度1,multi表示数值可重复

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值