命名空间
变体
操作

std::flat_multiset

来自 cppreference.cn
< cpp‎ | 容器
 
 
 
 
在头文件 <flat_set> 中定义
template<

    class Key,
    class Compare = std::less<Key>,
    class KeyContainer = std::vector<Key>

> class flat_multiset;
(C++23 起)

flat_multiset 是一种容器适配器,它提供关联容器的功能,存储类型为 Key 的有序对象集。与 std::flat_set 不同,它允许具有等效值的多个键。排序使用键比较函数 Compare 完成。

类模板 flat_multiset 作为对类型为 KeyContainer 的底层有序容器的包装器。

标准库使用 Compare 要求的地方,唯一性通过等价关系确定。非正式地,如果两个对象 ab 互不小于对方,则认为它们是等价的:!comp(a, b) && !comp(b, a)


std::flat_multiset 满足 ContainerReversibleContainer可选容器要求以及 AssociativeContainer 的所有要求(包括对数搜索复杂度),除了

  • 与节点相关的要求不适用,
  • 迭代器失效要求不同,
  • 插入和擦除操作的复杂度是线性的。

flat_multiset 支持大部分使用等价键的 AssociativeContainer 操作。

std::flat_multiset 的所有成员函数都是 constexpr:可以在常量表达式的求值中使用和创建 std::flat_multiset 对象。

然而,std::flat_multiset 对象通常不能是 constexpr,因为任何动态分配的存储都必须在同一常量表达式的求值中释放。

(C++26 起)

目录

[编辑] 迭代器失效

[编辑] 模板参数

Key - 存储元素的类型。如果 KeyKeyContainer::value_type 不是同一类型,则程序格式错误。
Compare - 提供严格弱排序的 Compare 类型。
KeyContainer - 用于存储元素的底层 SequenceContainer 类型。此类容器的迭代器应满足 LegacyRandomAccessIterator 或实现 random_access_iterator

标准容器 std::vectorstd::deque 满足这些要求。

[编辑] 成员类型

类型 定义
container_type KeyContainer[编辑]
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 实现定义的 LegacyRandomAccessIteratorConstexprIterator(C++26 起)random_access_iteratorvalue_type[编辑]
const_iterator 实现定义的 LegacyRandomAccessIteratorConstexprIterator(C++26 起)random_access_iteratorconst 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 类型对象中的键的函数
(公有成员函数) [编辑]

[编辑] 非成员函数

按字典序比较两个 flat_multiset 的值
(函数模板) [编辑]
特化 std::swap 算法
(函数模板) [编辑]
擦除所有满足特定标准的元素
(函数模板) [编辑]

[编辑] 辅助类

特化 std::uses_allocator 类型特性
(类模板特化) [编辑]

[编辑] 标签

表示范围的元素已排序(不要求唯一性)
(标签)[编辑]

[编辑] 推导指南

[编辑] 注意

成员类型 iteratorconst_iterator 可以是相同类型的别名。这意味着使用这两种类型作为参数类型定义一对函数重载可能违反单一定义规则。由于 iterator 可以转换为 const_iterator,因此单个函数使用 const_iterator 作为参数类型即可。


特性测试 标准 特性
__cpp_lib_flat_set 202207L (C++23) std::flat_setstd::flat_multiset
__cpp_lib_constexpr_containers 202502L (C++26) constexpr std::flat_multiset

[编辑] 示例

[编辑] 参见

(C++23)
适配容器以提供唯一键的集合,按键排序
(类模板) [编辑]
键的集合,按键排序
(类模板) [编辑]
键的集合,按键哈希
(类模板) [编辑]