std::multiset
| 
 在标头  
<set> 定义 | 
||
| 
 template< 
    class Key,  | 
(1) | |
| 
 namespace pmr { 
    template<  | 
(2) | (C++17 起) | 
std::multiset 是含有 Key 类型对象有序集的容器。与 set 不同,它允许多个 Key 拥有等价的值。用键比较函数 Compare 进行排序。搜索、插入和移除操作拥有对数复杂度。
标准库使用比较概念时,均用等价关系确定唯一性。不精确地说,如果两个对象 a 与 b 相互比较不小于对方:!comp(a, b) && !comp(b, a),那么认为它们等价。
| 
 比较等价的元素间的顺序是插入顺序,而且不会更改。  | 
(C++11 起) | 
std::multiset 满足容器 (Container) 、知分配器容器 (AllocatorAwareContainer) 、关联容器 (AssociativeContainer) 和可逆容器 (ReversibleContainer) 的要求。
模板形参
| 本节未完成 原因:添加模板形参的说明。  | 
成员类型
| 成员类型 | 定义 | ||||
key_type | 
Key | 
||||
value_type | 
Key | 
||||
size_type | 
无符号整数类型(通常是 std::size_t) | ||||
difference_type | 
有符号整数类型(通常是 std::ptrdiff_t) | ||||
key_compare | 
Compare | 
||||
value_compare | 
Compare | 
||||
allocator_type | 
Allocator | 
||||
reference | 
value_type& | ||||
const_reference | 
const value_type& | ||||
pointer | 
  | 
||||
const_pointer | 
  | 
||||
iterator | 
指向 value_type 的常老式双向迭代器 (LegacyBidirectionalIterator) | 
||||
const_iterator | 
指向 const value_type 的老式双向迭代器 (LegacyBidirectionalIterator) | ||||
reverse_iterator | 
std::reverse_iterator<iterator> | ||||
const_reverse_iterator | 
std::reverse_iterator<const_iterator> | ||||
node_type(C++17 起) | 
表示容器节点的节点句柄特化 | 
成员函数
构造 multiset(公开成员函数)  | 
|
析构 multiset(公开成员函数)  | 
|
| 将值赋给容器 (公开成员函数)  | 
|
| 返回关联的分配器 (公开成员函数)  | 
|
迭代器 | 
|
| 
 (C++11) 
 | 
返回指向起始的迭代器 (公开成员函数)  | 
| 
 (C++11) 
 | 
返回指向末尾的迭代器 (公开成员函数)  | 
| 
 (C++11) 
 | 
返回指向起始的逆向迭代器 (公开成员函数)  | 
| 
 (C++11) 
 | 
返回指向末尾的逆向迭代器 (公开成员函数)  | 
容量 | 
|
| 检查容器是否为空 (公开成员函数)  | 
|
| 返回元素数 (公开成员函数)  | 
|
| 返回可容纳的最大元素数 (公开成员函数)  | 
|
修改器 | 
|
| 清除内容 (公开成员函数)  | 
|
| 插入元素或节点 (C++17 起) (公开成员函数)  | 
|
| 
 (C++23) 
 | 
插入一个元素范围 (公开成员函数)  | 
| 
 (C++11) 
 | 
原位构造元素 (公开成员函数)  | 
| 
 (C++11) 
 | 
使用提示原位构造元素 (公开成员函数)  | 
| 擦除元素 (公开成员函数)  | 
|
| 交换内容 (公开成员函数)  | 
|
| 
 (C++17) 
 | 
提取容器中的节点 (公开成员函数)  | 
| 
 (C++17) 
 | 
从另一容器合并节点 (公开成员函数)  | 
查找 | 
|
| 返回匹配特定键的元素数量 (公开成员函数)  | 
|
| 寻找带有特定键的元素 (公开成员函数)  | 
|
| 
 (C++20) 
 | 
检查容器是否含有带特定键的元素 (公开成员函数)  | 
| 返回匹配特定键的元素范围 (公开成员函数)  | 
|
| 返回指向首个不小于给定键的元素的迭代器 (公开成员函数)  | 
|
| 返回指向首个大于给定键的元素的迭代器 (公开成员函数)  | 
|
观察器 | 
|
| 返回用于比较键的函数 (公开成员函数)  | 
|
返回用于比较 value_type 类型的对象中的键的函数(公开成员函数)  | 
|
非成员函数
| 
 (C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20) 
 | 
按照字典顺序比较两个 multiset 的值(函数模板)  | 
| 特化 std::swap 算法 (函数模板)  | 
|
| 
 (C++20) 
 | 
擦除所有满足特定判别标准的元素 (函数模板)  | 
推导指引 | 
(C++17 起) | 
注解
成员类型 iterator 与 const_iterator 可能是同一类型的别名。这表明以这两个类型为形参类型的一对函数重载可能违背单一定义规则。因为 iterator 可转换到 const_iterator,所以可以改成只提供一个以 const_iterator 为形参类型的函数。
| 功能特性测试宏 | 值 | 标准 | 功能特性 | 
|---|---|---|---|
__cpp_lib_containers_ranges | 
202202L | (C++23) | 容器的范围构造和插入 | 
示例
| 本节未完成 原因:暂无示例  | 
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 | 
|---|---|---|---|
| LWG 103 | C++98 | 允许通过迭代器修改键 | 使迭代器为常迭代器 | 
| LWG 230 | C++98 | Key 不需要满足可复制构造 (CopyConstructible)(因此不保证能构造 Key 类型的键) | 
Key 也需要满足可复制构造 (CopyConstructible)  | 
参阅
| 唯一键的集合,按照键排序 (类模板)  | 
|
| 
 (C++11 起) 
 | 
键的集合,按照键生成散列 (类模板)  | 
| 
 (C++23) 
 | 
调整容器以提供按关键字排序的关键字集合 (类模板)  |