C++学习25:容器深度探索之关联容器源码剖析(unordered、multi、set、map)

关联容器可以分为很多种“两大类
1.set和map两大类:key和value是否相同。
2.是否为multi两大类:key能否重复。
3.是否为unordered的两大类:key有无固定的排序

1 复习

1.1 红黑树复习

见:
在这里插入图片描述

1.2 哈希表复习

见:
在这里插入图片描述

2 set

2.1 性质

对比红黑树,set有如下特性:
的key和value合二为一

2.2 源码

在这里插入图片描述
根据源码的private部分,可见其数据就是一个红黑树类型的对象,迭代器特事故关于set的所有操作,其实都是调用了红黑树的操作。其中模板参数指定了一些默认类型,故使用时只需指定key的类型即可。

3 map

比set多了data,要求可以改data但不可以该key。

3.1 性质

对比红黑树和set,map有如下性质:
在这里插入图片描述

3.2 源码

在这里插入图片描述
分析同set,不同之处是类型为pair。
下面是一段特殊操作:map独有的下标操作,要传回来和key相对应的data,若key不存在,中括号会创建出这个key,放进map中来。在这里插入图片描述

4 unordered

所谓unordered,就是没有固定的排序。
不定序容器分为unordered set、unordered map、unordered multiset、unordered multimap。
用哈希表操作的关联容器,在c++11之前称为hash容器,因为底部是由hash table支撑,和之前没有任何区别。关于hash的具体内容请见后一节。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值