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