STL set详解

其实map和set是一个爸爸 - 红黑树爸爸,只不过set力气不够,不像map那么可以拥有一个主键(key)和实键(value).它只有一个键值并且

set当中不能存储相同的键值(set还具有强迫症). 其实map和set的区别差不多就完了. 他们的相同点,他们底层都是使用红黑树构造的

这使得他们的查找,插入,删除的效率都非常的高. 并且他们都是有序的,这些都非常关键! 这是一个好的容器的标准.当然set的禁忌

也和map一样,set不能存储无法比较大小的数据. 因为构建红黑树需要比较大小. 而且在set中存储相同的键值 ,新的就会覆盖久的.

set的特性是,所有元素都会根据元素的键值自动被排序. 我们可以通过set的迭代器改变set的元素值吗? 不行,因为set元素值就是其键

值,关系到set元素的排列规则,如果任意改变set元素值,会严重破坏set组织. set的源代码之中看到,set<T>::iterator被定义为底层RB_

tree的const_iterator,杜绝写入操作. 换句话说,set iterator是一种constant iterator(相对于mutable iterator).

set拥有与list相同的某些性质: 当客户端对它进行元素新增操作或删除操作时,操作之前的所有迭代器,在操作完成之后都依然有效,当然

那个被删除元素迭代器必然是个例外.

set相关函数

begin 返回一个迭代器,此迭代器指向set中的第一个元素。
cbegin 返回一个常量迭代器,此迭代器指向set中的第一个元素。
cend 返回一个迭代器,此迭代器指向set最后一个元素的下一个位置
clear 清除set的所有元素。
crbegin 返回一个常量迭代器,此迭代器指向反向set中的第一个元素。
crbegin 返回一个常量迭代器,此迭代器指向反向set中的第一个元素。
crend 返回一个常量迭代器,此迭代器指向反向set中最后一个元素之后的位置。
emplace 将就地构造的元素插入到set。
emplace_hint 将就地构造的元素插入到set,附带位置提示。
empty 如果set为空,则返回 true。
end 返回一个迭代器,此迭代器指向set最后一个元素的下一个位置
erase 从指定位置移除set中的元素或元素范围。
find 返回一个迭代器,此迭代器指向set中其键与指定键相等的元素的位置。
get_allocator 返回集合中与给定值相等的上下限的两个迭代器.
insert 将元素或元素范围插入到set中的指定位置。
key_comp 将返回一个用于元素键值比较的函数
lower_bound 返回一个迭代器,此迭代器指向set中其键值等于或大于指定键的键值的第一个元素。
max_size 返回set的最大长度。
rbegin 返回一个迭代器,此迭代器指向反向set中的第一个元素。
rend 返回一个迭代器,此迭代器指向反向set中最后一个元素之后的位置。
size 返回set中的元素数量。
swap 交换两个set的元素。
upper_bound 返回一个迭代器,此迭代器指向set中其键值大于指定键的键值的第一个元素。

猜你喜欢

转载自www.cnblogs.com/zhangfuxiao/p/9319392.html
今日推荐