STL__set让你彻底搞清楚set的特性

set

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

我们可以通过set的迭代器改变set的元素吗?不行的,因为set元素值就是其键值,关系到set元素的排列规则。如果任意改变set元素值,会严重破坏set组织。稍后你会在set源代码之中看到的,set<T>::iterator被定义为底层RB-tree的const_iterator,杜绝写入操作。换句话说,set iterator是一种constant iterator(相对于mutable iterators)。

set拥有与list相同的某些性质:当客户端对它进行元素新增操作(insert)或删除操作(erase)时,操作之前的所有迭代器,在操作完成之后都依然有效。当然被删除的那个元素的迭代器必然是个例外。

STL 特别提供了一组 set/multiset 相关的算法,包括交集set_intersection、联集set-union、差集set_difference、对称差集set_symmetric_difference。

由于RB_tree是一种平衡二叉搜索树,自动排序的效果很不错,所以标准的STLset即以RB_tree为底层机制。又由于set所开放的各种操作接口,RB_tree也都提供了,所以几乎所有的set操作行为,都只是转调用RB_tree的操作行为而已。

下面是set的源代码摘录,其中的注释几乎说明了一切,请仔细阅读哦
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值