简单的了解一下rbtree和set/map区别与联系_一个博客id_新浪博客

再说set之前先说一下set和map之间的联系与区别:

set是一种关联式容器,其特性如下:

  • set以RBTree作为底层容器
  • 所得元素的只有key没有value,value就是key
  • 不允许出现键值重复
  • 所有的元素都会被自动排序
  • 不能通过迭代器来改变set的值,因为set的值就是键
如果set中允许修改键值的话,那么首先需要删除该键,然后调节平衡,在插入修改后的键值,再调节平衡,如此一来,严重破坏了set的结构,导致iterator失效,不知道应该指向之前的位置,还是指向改变后的位置。所以STL中将set的迭代器设置成const,不允许修改迭代器的值

map和set一样是关联式容器,它们的底层容器都是红黑树,区别就在于map的值不作为键,键和值是分开的。它的特性如下:

  • map以RBTree作为底层容器
  • 所有元素都是键+值存在
  • 不允许键重复
  • 所有元素是通过键进行自动排序的
  • map的键是不能修改的,但是其键对应的值是可以修改的

在map中,一个键对应一个值,其中键不允许重复,不允许修改,但是键对应的值是可以修改的


简单的介绍一下rb_tree:

1.是一种高度平衡的二叉树,所谓平衡是左臂和右臂相对一样长

2.插入数据的时候会自动排序,找到一个合适的位置插入

3.红黑树自身提供迭代器,可以从begin()   ++  到   end() 得到的是一个数据是有序的数据

4.前面我们说到对于set的key就是数据本身。所以我们不能用迭代器修改key

   但是对于map key和数据是被独立的,所以我们可以修改数据,但是同样还是不能修改key

5.红黑树底层提供俩种插入:

insert_unique():要插入的key需要是独一无二的,否则插入失败

insert_equal(): 可以插入重复的key的数据,如果插入重复key 的节点,则会将该节点插入同key的相邻位置。


接下来看set的具体实现。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值