std:: flat_multiset
|
定义于头文件
<flat_set>
|
||
|
template
<
class
Key,
|
(C++23 起) | |
平面多重集合是一种
容器适配器
,提供关联容器的功能,用于存储已排序的
Key
类型对象集合。与
std::flat_set
不同,允许存在多个等值键。排序通过键比较函数
Compare
实现。
类模板
flat_multiset
作为对底层排序容器的包装器,该容器以
KeyContainer
类型的对象形式传入。
在标准库所有使用 Compare 要求的地方,唯一性都是通过等价关系来确定的。非正式地说,两个对象 a 和 b 被认为是等价的,当且仅当它们互不小于对方: ! comp ( a, b ) && ! comp ( b, a ) 。
std::flat_multiset
满足
Container
、
ReversibleContainer
、
可选容器要求
以及
AssociativeContainer
的所有要求(包括对数搜索复杂度),但以下情况除外:
- 与节点相关的要求不适用,
- 迭代器失效要求有所不同,
- 插入和擦除操作的复杂度为线性。
平面多重集合支持大多数使用等键的 AssociativeContainer 操作。
std::flat_multiset
的所有成员函数都是
constexpr
:可以在常量表达式求值过程中创建和使用
std::flat_multiset
对象。
但
|
(since C++26) |
目录 |
迭代器失效
| 本节内容尚不完整 |
模板参数
| Key | - |
存储元素的类型。如果
Key
与
KeyContainer::value_type
不是同一类型,则程序非良构。
|
| Compare | - | 提供严格弱序的 Compare 类型。 |
| KeyContainer | - |
用于存储元素的基础
SequenceContainer
类型。该容器的迭代器应满足
LegacyRandomAccessIterator
要求或建模
random_access_iterator
。
标准容器 std::vector 和 std::deque 满足这些要求。 |
成员类型
| 类型 | 定义 |
container_type
|
Key
Container
|
key_type
|
Key
|
value_type
|
Key
|
key_compare
|
Compare
|
value_compare
|
Compare
|
reference
|
value_type & |
const_reference
|
const value_type & |
size_type
|
typename KeyContainer :: size_type |
difference_type
|
typename KeyContainer :: difference_type |
iterator
|
实现定义的
LegacyRandomAccessIterator
,
ConstexprIterator
(自 C++26 起)
和
random_access_iterator
到
value_type
|
const_iterator
|
实现定义的
LegacyRandomAccessIterator
,
ConstexprIterator
(自 C++26 起)
和
random_access_iterator
到
const
value_type
|
reverse_iterator
|
std:: reverse_iterator < iterator > |
const_reverse_iterator
|
std:: reverse_iterator < const_iterator > |
成员对象
| 成员 | 描述 |
container_type
c
(私有)
|
被适配的容器
( 仅用于说明的成员对象* ) |
key_compare
compare
(私有)
|
比较函数对象
( 仅用于说明的成员对象* ) |
成员函数
构造
flat_multiset
(公开成员函数) |
|
|
(destructor)
(implicitly declared)
|
销毁容器适配器的每个元素
(公开成员函数) |
|
为容器适配器赋值
(公开成员函数) |
|
迭代器 |
|
|
返回指向起始的迭代器
(公开成员函数) |
|
|
返回指向末尾的迭代器
(公开成员函数) |
|
|
返回指向起始的逆向迭代器
(公开成员函数) |
|
|
返回指向末尾的逆向迭代器
(公开成员函数) |
|
容量 |
|
|
检查容器适配器是否为空
(公开成员函数) |
|
|
返回元素数量
(公开成员函数) |
|
|
返回可容纳的最大元素数
(公开成员函数) |
|
修改器 |
|
|
原位构造元素
(公开成员函数) |
|
|
使用提示原位构造元素
(公开成员函数) |
|
|
插入元素
(公开成员函数) |
|
|
插入元素范围
(公开成员函数) |
|
|
提取底层容器
(公开成员函数) |
|
|
替换底层容器
(公开成员函数) |
|
|
擦除元素
(公开成员函数) |
|
|
交换内容
(公开成员函数) |
|
|
清除内容
(公开成员函数) |
|
查找 |
|
|
查找具有特定键的元素
(公开成员函数) |
|
|
返回匹配特定键的元素数量
(公开成员函数) |
|
|
检查容器是否包含具有特定键的元素
(公开成员函数) |
|
|
返回指向首个
不小于
给定键的元素的迭代器
(公开成员函数) |
|
| 返回指向 | |
非成员函数
|
(C++23)
|
按字典序比较两个
flat_multiset
的值
(函数模板) |
|
(C++23)
|
特化
std::swap
算法
(函数模板) |
|
(C++23)
|
擦除所有满足特定条件的元素
(函数模板) |
辅助类
|
特化
std::uses_allocator
类型特征
(类模板特化) |
标签
|
指示范围中的元素已排序(不要求唯一性)
(标签) |
推导指引
注释
成员类型
iterator
和
const_iterator
可能是同一类型的别名。这意味着使用这两种类型作为参数类型来定义一对函数重载可能会违反
单一定义规则
。由于
iterator
可转换为
const_iterator
,改用单个以
const_iterator
作为参数类型的函数即可解决问题。
| 功能测试 宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__cpp_lib_flat_set
|
202207L
|
(C++23) |
std::flat_set
和
std::flat_multiset
|
__cpp_lib_constexpr_flat_set
|
202502L
|
(C++26) |
constexpr
std::flat_multiset
|
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
(C++23)
|
适配容器以提供按键排序的唯一键集合
(类模板) |
|
按键排序的键集合
(类模板) |
|
|
(C++11)
|
通过哈希函数组织键的集合
(类模板) |