std::flat_multiset
定义于头文件 <flat_set> |
||
template< class Key, |
(自 C++23 起) | |
平面多重集合 (flat multiset) 是一个容器适配器,它提供了关联容器的功能,该关联容器存储类型为 Key
的对象的已排序集合。与 std::flat_set 不同,允许多个具有等效值的键。排序是使用键比较函数 Compare
完成的。
类模板 flat_multiset
充当作为 KeyContainer
类型的对象传递的底层排序容器的包装器。
每当标准库使用 Compare 要求时,唯一性都通过使用等价关系来确定。非正式地,如果两个对象 a 和 b 彼此都不小于对方,则认为它们是等价的: !comp(a, b) && !comp(b, a)。
std::flat_multiset
满足Container、 ReversibleContainer、 可选容器要求以及 AssociativeContainer 的所有要求(包括对数搜索复杂度),除了
- 与节点相关的要求不适用,
- 迭代器失效要求不同,
- 插入和擦除操作的复杂度是线性的。
平面多重集合 (flat multiset) 支持大多数 AssociativeContainer 的使用相等键的操作。
|
(自 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 (公有成员函数) | |
(析构函数) (隐式声明) |
销毁容器适配器的每个元素 (公有成员函数) |
为容器适配器赋值 (公有成员函数) | |
迭代器 | |
返回指向开头的迭代器 (公有成员函数) | |
返回指向末尾的迭代器 (公有成员函数) | |
返回指向开头的反向迭代器 (公有成员函数) | |
返回指向末尾的反向迭代器 (公有成员函数) | |
容量 | |
检查容器适配器是否为空 (公有成员函数) | |
返回元素数量 (公有成员函数) | |
返回最大可能的元素数量 (公有成员函数) | |
修改器 | |
就地构造元素 (公有成员函数) | |
使用提示就地构造元素 (公有成员函数) | |
插入元素 (公有成员函数) | |
插入元素范围 (公有成员函数) | |
提取底层容器 (公有成员函数) | |
替换底层容器 (公有成员函数) | |
擦除元素 (公有成员函数) | |
交换内容 (公有成员函数) | |
清除内容 (公有成员函数) | |
查找 | |
查找具有特定键的元素 (公有成员函数) | |
返回匹配特定键的元素数量 (公有成员函数) | |
检查容器是否包含具有特定键的元素 (公有成员函数) | |
返回指向首个不小于给定键的元素的迭代器 (公有成员函数) | |
返回指向首个大于给定键的元素的迭代器 (公有成员函数) | |
返回与特定键匹配的元素范围 (公有成员函数) | |
观察器 | |
返回比较键的函数 (公有成员函数) | |
返回比较 value_type 类型对象中键的函数(公有成员函数) |
[编辑] 非成员函数
(C++23) |
按字典顺序比较两个 flat_multiset 的值(函数模板) |
特化 std::swap 算法 (函数模板) | |
(C++23) |
擦除所有满足特定标准的元素 (函数模板) |
[编辑] 辅助类
特化 std::uses_allocator 类型特征 (类模板特化) |
[编辑] 标签
指示范围内的元素已排序(不要求唯一性) (标签) |
[编辑] 推导指引
[编辑] 注解
成员类型 iterator
和 const_iterator
可能是同一类型的别名。这意味着使用这两种类型作为参数类型定义一对函数重载可能会违反单一定义规则。由于 iterator
可转换为 const_iterator
,因此使用 const_iterator
作为参数类型的单个函数将可以替代使用。
特性测试宏 | 值 | Std | 特性 |
---|---|---|---|
__cpp_lib_flat_set |
202207L |
(C++23) | std::flat_set 和 std::flat_multiset |
__cpp_lib_constexpr_containers |
202502L |
(C++26) | constexpr std::flat_multiset |
[编辑] 示例
本节尚不完整 原因:没有示例 |
[编辑] 参见
(C++23) |
适配容器以提供唯一键的集合,按键排序 (类模板) |
键的集合,按键排序 (类模板) | |
(C++11) |
键的集合,按键哈希 (类模板) |