map&set 容器的实现原理

C++ STL 的 set 和 map 容器底层都是由红黑树来实现的,因此 map 和 set 的实现原理就是红黑树的实现原理,其中 map 是用来存储键值映射对的,它把【key,value】打包成pair 对象存储在红黑树结构上,元素都是经过排序的,因此可以在 O(log2n)的时间复杂度内对 set 和 map 进行增删查操作,效率非常高。对于红黑树的阐述,以下罗列一些基本信息,
更详细的红黑树理解,请参照扩展里面给出的链接地址。
红黑树是一棵非严格的平衡二叉树,左右子树的高度差不能超过较短子树高度的 2 倍,数据的增删查效率都比较高,平均时间复杂度在 O(log2n)。在此给出红黑树的定义:
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点(NIL)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。红黑树不像 AVL(平衡二叉树)树那样维持了二叉树的高度平衡(左右子树的高度差不能超过 1),因此在插入删除数据时,所做的旋转操作比起红黑树来说,那就少很多了,因此其效率也比 AVL 树高;红黑树插入一个新节点,旋转的次数最多 2 次,删除一个节点旋转的次数最多 3 次。
在 C++STL 中,map 和 multimap,set 和 multiset 这四种关联容器的底层都是由红黑树来实现的,因此如果要把自定义类类型作为 set 和 map 的元素类型的话,一定要给自定义类型提供operator>或者operator<比较运算符的重载函数,因为红黑树是一棵二叉排序树,入 set 和 map 的元素都是要经过排序的,请注意!

红黑树的讲解:
http://blog.csdn.net/yang_yulei/article/details/26066409
C++总结 unordered_map,unordered_set,map 和 set 的用法和区别
http://blog.csdn.net/zjajgyy/article/details/65935473
STL 中 set 和 map
http://blog.csdn.net/pirlck/article/details/51326547
http://blog.csdn.net/u012861978/article/details/50851854

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值