Namespaces
Variants

std:: flat_multiset

From cppreference.net
定义于头文件 <flat_set>
template <

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

> class flat_multiset ;
(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 对象。

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

(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)
销毁容器适配器的每个元素
(公开成员函数)
为容器适配器赋值
(公开成员函数)
迭代器
返回指向起始的迭代器
(公开成员函数)
返回指向末尾的迭代器
(公开成员函数)
返回指向起始的逆向迭代器
(公开成员函数)
返回指向末尾的逆向迭代器
(公开成员函数)
容量
检查容器适配器是否为空
(公开成员函数)
返回元素数量
(公开成员函数)
返回可容纳的最大元素数
(公开成员函数)
修改器
原位构造元素
(公开成员函数)
使用提示原位构造元素
(公开成员函数)
插入元素
(公开成员函数)
插入元素范围
(公开成员函数)
提取底层容器
(公开成员函数)
替换底层容器
(公开成员函数)
擦除元素
(公开成员函数)
交换内容
(公开成员函数)
清除内容
(公开成员函数)
查找
查找具有特定键的元素
(公开成员函数)
返回匹配特定键的元素数量
(公开成员函数)
检查容器是否包含具有特定键的元素
(公开成员函数)
返回指向首个 不小于 给定键的元素的迭代器
(公开成员函数)
返回指向

非成员函数

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

辅助类

特化 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)
适配容器以提供按键排序的唯一键集合
(类模板)
按键排序的键集合
(类模板)
通过哈希函数组织键的集合
(类模板)