学习日记-map

c++中unordered_map和 map的区别 unordered_map

unordered_map

unordered_map c++里的一个关联容器,内部采用的是hash表结构,拥有快速检索的功能。
1.特性
关联性:通过key去检索value,而不是通过绝对地址(和顺序容器不同)
无序性:使用hash表存储,内部无序
Map : 每个值对应一个键值
键唯一性:不存在两个元素的键一样
动态内存管理:使用内存管理模型来动态管理所需要的内存空间

map

map内部实现的是一棵红黑树(红黑树是非严格平衡二叉搜索树,而avl是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一节点都代表着map的一个元素
1.特性:
优点:有序性。
缺点:空间占用率高,因为map内部实现了红黑树

另外介绍一下红黑树: 红黑树其实就是去除二叉查找树顶端优势的解决方案,从而达到树的平衡
红黑树的特性:
1.每个节点都有红色或黑色
2.树的根始终是黑色的 (黑土地孕育黑树根, )
3.没有两个相邻的红色节点(红色节点不能有红色父节点或红色子节点,并没有说不能出现连续的黑色节点)
4.从节点(包括根)到其任何后代NULL节点(叶子结点下方挂的两个空节点,并且认为他们是黑色的)的每条路径都具有相同数量的黑色节点
应用场景
1、java8 hashmap中链表转红黑树。
优势:时间复杂度从O(n)–>O(logn) ,且自旋开销较其他树较低(不用整体平衡)。
2、epoll在内核中的实现,用红黑树管理事件块(文件描述符)。
优势:
因为内核态需要维护一个长久存放fd的数据结构,而fd变动十分频繁,且需要支持快速查询,且所以红黑树很适合。
红黑树可以判断是否是重复的fd其实我感觉用hash表也可以
3、Java的TreeMap实现,相对与hashMap优势,内部key保持有序,且支持自定义排序比较器。适用场景,对数据需要排序统计
4、linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块CFS 背后的主要想法是维护为任务提供处理器时间方面的平衡(公平性)。这意味着应给进程分配相当数量的处理器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值