类模板
<set>

std::set

template < class T,                        // set::key_type/value_type           class Compare = less<T>,        // set::key_compare/value_compare           class Alloc = allocator<T>      // set::allocator_type           > class set;
集合 (Set)
集合是遵循特定顺序存储唯一元素的容器。

set中,元素的值也标识了它(值本身就是,类型为T),并且每个值必须是唯一的。set中的元素的值一旦进入容器就不能被修改(元素总是 const 的),但可以从容器中插入或删除它们。

在内部,set中的元素始终按照其内部比较对象(类型为Compare).

set)所指定的特定严格弱序标准进行排序。容器通常比 unordered_set 容器通过访问单个元素要慢,但它们允许基于其顺序对子集进行直接迭代。

集合通常实现为二叉搜索树

容器属性

关联容器
关联容器中的元素是通过它们的而不是它们在容器中的绝对位置来引用的。
有序的
容器中的元素始终遵循严格的顺序。所有插入的元素都会在此顺序中获得一个位置。
集合 (Set)
元素的值也是用于标识它的
唯一的键
容器中没有两个元素可以具有等效的
感知分配器
容器使用分配器对象来动态处理其存储需求。

模板参数

T
元素的类型。set容器中的每个元素也由这个值唯一标识(每个值本身也是元素的键)。
别名为成员类型set::key_typeset::value_type.
Compare
一个二元谓词,它接受两个与元素类型相同的参数并返回一个bool值。表达式comp(a,b),其中 comp 是此类型的对象,ab 是键值,如果 a 在该函数定义的严格弱序中被认为在 b 之前,则应返回true
要放回的字符的set对象使用此表达式来确定元素在容器中遵循的顺序以及两个元素键是否等效(通过自反比较它们:如果!comp(a,b) && !comp(b,a),则它们是等效的)。set容器中没有两个元素可以等效。
这可以是一个函数指针或一个函数对象(参见 构造函数 以获取示例)。它默认为less<T>,其返回结果与应用小于运算符 (a<b).
别名为成员类型set::key_compareset::value_compare.
分配器 (Alloc)
用于定义存储分配模型的分配器对象类型。默认情况下,使用 allocator 类模板,它定义了最简单的内存分配模型并且与值无关。
别名为成员类型set::allocator_type.

成员类型

成员类型定义说明
key_type第一个模板参数 (T)
value_type第一个模板参数 (T)
key_compare第二个模板参数 (Compare)默认为less<key_type>
value_compare第二个模板参数 (Compare)默认为less<value_type>
allocator_type第三个模板参数 (分配器 (Alloc))默认为allocator<value_type>
引用allocator_type::reference对于默认的 allocatorvalue_type&
const_referenceallocator_type::const_reference对于默认的 allocatorconst value_type&
指针allocator_type::pointer对于默认的 allocatorvalue_type*
const_pointerallocator_type::const_pointer对于默认的 allocatorconst value_type*
iterator指向value_type随机访问迭代器,可转换为const_iterator
const_iterator指向const value_type
reverse_iteratorreverse_iterator<iterator>
const_reverse_iteratorreverse_iterator<const_iterator>
difference_type一个有符号整数类型,与iterator_traits<iterator>::difference_type相同,通常与 ptrdiff_t 一样
size_type一个可以表示任何非负值的difference_type的无符号整数类型,通常与 size_t 一样
成员类型定义说明
key_type第一个模板参数 (T)
value_type第一个模板参数 (T)
key_compare第二个模板参数 (Compare)默认为less<key_type>
value_compare第二个模板参数 (Compare)默认为less<value_type>
allocator_type第三个模板参数 (分配器 (Alloc))默认为allocator<value_type>
引用value_type&
const_referenceconst value_type&
指针allocator_traits<allocator_type>::pointer对于默认的 allocatorvalue_type*
const_pointerallocator_traits<allocator_type>::const_pointer对于默认的 allocatorconst value_type*
iterator指向const value_type* 可转换为const_iterator
const_iterator指向const value_type*
reverse_iteratorreverse_iterator<iterator>*
const_reverse_iteratorreverse_iterator<const_iterator>*
difference_type一个有符号整数类型,与
iterator_traits<iterator>::difference_type
相同,通常与 ptrdiff_t 一样
size_type一个可以表示任何非负值的difference_type的无符号整数类型,通常与 size_t 一样
*注意:set 中的所有迭代器都指向 const 元素。const_成员类型是否与其非const_对应项是同一类型取决于具体的库实现,但程序不应依赖于它们的不同来重载函数const_iterator更通用,因为iterator总是可以转换为它。

成员函数


迭代器:

容量:

修改器:

观察器:

操作:

分配器: