STL——set

一、set的特性

所有元素都会根据元素的键值自动排序。set不像map那样可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值

二、可以通过set的迭代器改变set的元素值吗?

不可以,因为set元素值就是其键值,关系到set元素的排列规则。如果任意改变set元素值,会严重破坏set组织。在set源代码中,set<T>::iterator被定义为底层红黑树的const_iterator,杜绝写入操作。换句话说set iterator是一种const iterators(相对于mutable iterators).

三、源码:typedef typename rep_type::const_iterator iterator;

iterator被定义为红黑树大的const_iterator,这表示set的迭代器无法执行写入操作,这是因为set的元素有一定的次序安排,不允许用户在任意处进行写入操作。

四、set使用的一定是红黑树的insert_unique()而非insert_equal(),multiset才使用红黑树的insert_equal(),因为set不允许相同的键值存在,multiset才允许相同键值存在

五、set拥有与list相同的某些性质:

      当客户端对它进行元素新增操作(insert)或删除(erase)时,操作之前的所有迭代器,在操作完之后都依然有效,当然,被删除的那些元素的迭代器必然是个例外。在insert的时候,迭代器指向的是那个新增的结点

六、二叉搜索树

(1)、特点:任何结点的键值一定大于其左孩子树中的每一个节点的键值,并小于其右子树中的每一个节点的键值。因此从根节点一直往右走,直至无路可走,即得最大元素,从根节点一直往左走,直至无路可走,即得最小元素。

(2)删除:假定删除旧节点A,情况可分为两种,<1>如果A只有一个子节点,那么将A的子节点连接至A的父节点,并将A删除即可。如果A有两个子节点,那从A的右子树中找最小的节点取代A即可。(注意,右子树的最小节点极易获得:从右子树节点开始,(视右节点为根节点),一直向左走至底即是)  

七、红黑树的迭代器属于双向迭代器,但不具备随机定位能力,它的操作和成员访问操作与list十分近似,红黑树迭代器的前进操作operator++()调用了基层迭代器的increament(),红黑树迭代器的后退操作operator—()则调用了基层迭代器的decreament()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值