1.头文件 <set>
关联式容器 set 包含在 头文件 <set>
2.set 介绍
原文: Sets are containers that store unique elements following a specific order.
In a set, the value of an element also identifies it (the value is itself the key, of type T), and each value must be unique. The value of the elements in a set cannot be modified once in the container (the elements are always const), but they can be inserted or removed from the container.
Internally, the elements in a set are always sorted following a specific strict weak ordering criterion indicated by its internal comparison object (of type Compare).
set containers are generally slower than unordered_set containers to access individual elements by their key, but they allow the direct iteration on subsets based on their order.
Sets are typically implemented as binary search trees.
翻译: 1.set是按照特定顺序存储唯一元素的容器。 2.set中,元素的值也标识它(值本身是T类型的键),每个值必须是唯一的。 3.set中元素的值不能在容器中修改一次(元素总是Const),但是可以从容器中插入或删除它们。 4.在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则排序。 5.set容器通常比unorder_set容器通过键(key)访问单个元素的速度要慢,但是它们允许根据它们的顺序对子集进行直接迭代。 6.set底层是由二叉搜索树(红黑树)实现的。
注意:
- 与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set中只放value,但在底层实际存放的是由<value, value>构成的键值对。
- set中插入元素时,只需要插入value即可,不需要构造键值对。
- set中的元素不可以重复(因此可以使用set进行数据去重)。
- 使用set的迭代器遍历set中的元素,可以得到有序序列
- set中的元素默认按照小于来比较
- set中查找某个元素,时间复杂度为:log2n(以二为底)
- set中的元素不允许修改
- set中的底层使用二叉搜索树(红黑树)来实现。
3. set使用介绍
3.2 set 构造函数
构造函数 | 函数介绍 |
---|
set (const Compare& comp = Compare(), const Allocator& = Allocator() ); | 构造空的set对象 | set (InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& = Allocator()); | 用[first, last)区间中的元素构造set对象 | set ( const set<Key,Compare,Allocator>& x); | set的拷贝构造 |
3.3 set的迭代器
函数声明 | 功能介绍 |
---|
iterator begin() | 返回set中起始位置元素的迭代器 | iterator end() | 返回set中最后一个元素后面的迭代器 | const_iterator cbegin() const | 返回set中起始位置元素的const迭代器 | const_iterator cend() const | 返回set中最后一个元素后面的const迭代器 | reverse_iterator rbegin() | 返回set第一个元素的反向迭代器,即end | reverse_iterator rend() | 返回set最后一个元素下一个位置的反向迭代器,即rbegin | const_reverse_iterator crbegin() const | 返回set第一个元素的反向const迭代器,即cend | const_reverse_iterator crend() const | 返回set最后一个元素下一个位置的反向const迭代器,即crbegin |
3.4 set的容量
函数声明 | 功能介绍 |
---|
bool empty ( ) const | 检测set是否为空,空返回true,否则返回true | size_type size() const | 返回set中有效元素的个数 |
3.5 set修改操作
函数声明 | 功能介绍 |
---|
pair<iterator,bool> insert ( const value_type& x ) | 在set中插入元素x,实际插入的是<x, x>构成的键值对,如果插入成功,返回<该元素在set中的位置,true>,如果插入失败,说明x在set中已经存在,返回<x在set中的位置,false> | iterator insert ( iterator position, const value_type& x ) | 在set的position位置插入x,实际插入的是<x, x>构成的键值对,注意:position位置只是参考,x最终不一定在该位置 | template void insert ( InputIterator first, InputIterator last ); | 在set中插入[first, last)区间中的元素 | void erase ( iterator position ) | 删除set中position位置上的元素 | size_type erase ( const key_type& x ) | 删除set中值为x的元素,返回删除的元素的个数 | void erase ( iterator first, iterator last ) | 删除set中[first, last)区间中的元素 | void swap ( set<Key,Compare,Allocator>& st ); | 交换set中的元素 | void clear ( ) | 将set中的元素清空 | iterator find ( const key_type& x ) const | 返回set中值为x的元素的位置 | size_type count ( const key_type& x ) const | 返回set中值为x的元素的个数 |
|