std::
multiset
类模板 <set>
template < class T, // multiset::key_type/value_type
class Compare = less<T>, // multiset::key_compare/value_compare
class Alloc = allocator<T> > // multiset::allocator_type
> class multiset; |
多重集合
多重集合是按照特定顺序存储元素的容器,其中多个元素可以具有等效的值。
在multiset中,元素的值也标识它(该值本身就是键,类型为T)。
multiset中元素的值在容器中不能修改(元素总是const),但它们可以从容器中插入或删除。
在内部,多重集合中的元素总是按照其内部比较对象(Compare类型)指示的特定的严格弱排序标准排序。
在按照键值访问单个元素方面,Multiset容器通常比unordered_multiset容器慢,
但它们允许根据顺序对子集进行直接迭代。
多重集合通常被实现为二叉搜索树。
☲ 容器特性
-
关联
-
关联容器中的元素是通过键引用的,而不是通过它们在容器中的绝对位置引用的。
-
有序
-
容器中的元素始终遵循严格的顺序。按此顺序给所有插入的元素一个位置。
-
固定
-
元素的值也是用来标识它的键。
-
多重
-
容器中的多个元素可以具有相同的键。
-
分配器
-
容器使用allocator对象动态地处理其存储需求。。
☲ 模板参数
-
T
-
元素的类型。multiset容器中的每个元素也是由这个值标识的(每个值本身也是元素的键)。
成员类型 multiset::key_type 和 multiset::value_type 的别名.
-
Compare
-
一个二元谓词,它接受两个与元素类型相同的参数,并返回bool类型。
表达式comp(a,b),其中comp是该类型的对象,a和b是键值,
如果a被认为按照函数定义的严格弱排序在b之前,则返回true。
multiset对象使用这个表达式来确定元素在容器中遵循的顺序以及两个元素键是否相等
(通过条件反射比较它们:如果!comp(a,b) && !comp(b,a))它们是相等的)。
一个集合容器中没有两个元素是相等的。
这可以是一个函数指针或一个函数对象(参见构造函数的例子)。
默认为less<T>,它返回的结果与小于操作符(a<b)相同。
成员类型 multiset::key_compare 和 multiset::value_compare 的别名.
-
Alloc
-
用于定义存储分配模型的allocator对象的类型。 默认情况下,
使用allocator类模板,它定义了最简单的内存分配模型,并且是值独立的。
别名为成员类型 multiset::allocator_type.
☉ 成员类型
-
C++98:
-
成员类型 |
定义 |
注释 |
key_type |
起始模板参数(T) |
|
value_type |
起始模板参数(T) |
|
key_compare |
第二个模板参数(Compare) |
默认为: less<key_type> |
value_compare |
第二个模板参数(Compare) |
默认为: less<value_type> |
allocator_type |
第三个模板参数(Alloc) |
默认为:
allocator<value_type> |
reference |
allocator_type::reference& |
默认分配器:
value_type& |
const_reference |
allocator_type::const_reference |
默认分配器:
const value_type& |
pointer |
allocator_type::pointer |
默认分配器:value_type* |
const_pointer |
allocator_type::const_pointer |
默认分配器:const value_type* |
iterator |
一个访问value_type的双向迭代器 |
转换为const_iterator |
const_iterator |
指向const value_type的双向迭代器 |
|
reverse_iterator |
reverse_iterator<iterator> |
|
const_reverse_iterator |
reverse_iterator<const_iterator> |
|
difference_type |
一种有符号整型,相当于:
iterator_traits<iterator>::difference_type
|
通常与ptrdiff_t相同 |
size_type |
无符号整型,可以表示任何difference_type的非负值 |
通常与size_t相同 |
-
C++11:
-
成员类型 |
定义 |
注释 |
key_type |
起始模板参数(T) |
|
value_type |
起始模板参数(T) |
|
key_compare |
第二个模板参数(Compare) |
默认为: less<key_type> |
value_compare |
第二个模板参数(Compare) |
默认为: less<value_type> |
allocator_type |
第三个模板参数(Alloc) |
默认为:
allocator<value_type> |
reference |
value_type& |
|
const_reference |
const value_type& |
|
pointer |
allocator_traits<allocator_type>::pointer |
默认分配器:value_type* |
const_pointer |
allocator_traits<allocator_type>::const_pointer |
默认分配器:const value_type* |
iterator |
一个访问value_type的双向迭代器 |
* 转换为const_iterator |
const_iterator |
指向const value_type的双向迭代器 |
* |
reverse_iterator |
reverse_iterator<iterator> |
* |
const_reverse_iterator |
reverse_iterator<const_iterator> |
* |
difference_type |
一种有符号整型,相当于:
iterator_traits<iterator>::difference_type
|
通常与ptrdiff_t相同 |
size_type |
无符号整型,可以表示任何difference_type的非负值 |
通常与size_t相同 |
*注意:multiset中的所有迭代器都指向const元素。
const_成员类型是否与非const成员类型相同取决于特定的标准库实现,
但程序不应该依赖于它们与重载函数的不同:const_iterator更通用,
因为迭代器总是可以转换为它。
☞ 成员函数
迭代器:
begin |
返回一个指向multiset 开头的迭代器 (公众成员函数) |
end |
返回一个指向multiset末尾元素的下一个元素的迭代器 (公众成员函数) |
rbegin |
返回指向multiset 最后一个元素的反向迭代器 (公众成员函数) |
rend |
返回指向multiset 开始元素之前的理论元素的反向迭代器(公众成员函数) |
cbegin |
返回一个指向multiset 开头的常量迭代器 (公众成员函数) |
cend |
返回一个指向multiset 末尾元素的下一个元素的常量迭代器 (公众成员函数) |
crbegin |
返回指向multiset 最后一个元素的常量反向随机迭代器(公众成员函数) |
crend |
返回指向multiset 开始元素前一个元素的常量反向随机迭代器 (公众成员函数) |
容量:
修改器:
查看:
操作:
分配器: