std:: flat_map
|
定义于头文件
<flat_map>
|
||
|
template
<
class
Key,
|
(C++23 起) | |
flat map 是一种
容器适配器
,提供包含唯一键值对的关联容器功能。键值通过比较函数
Compare
进行排序。
flat_map
类模板作为两个底层容器的包装器,分别以
KeyContainer
和
MappedContainer
类型的对象形式传入。第一个容器经过排序,每个键对应的值位于第二个容器中的相同索引(偏移量)位置。两个容器中的元素数量始终保持一致。
凡是标准库使用 Compare 要求的地方,唯一性都是通过等价关系来确定的。非正式地说,两个对象 a 和 b 被认为是等价的,当且仅当两者互不小于对方: ! comp ( a, b ) && ! comp ( b, a ) 。
std::flat_map
满足
Container
、
ReversibleContainer
、
可选容器要求
以及
AssociativeContainer
的所有要求(包括对数搜索复杂度),但以下情况除外:
- 与节点相关的要求不适用,
- 迭代器失效要求不同,
- 插入和擦除操作的复杂度为线性。
平面映射支持大多数使用唯一键的 AssociativeContainer 操作。
std::flat_map
的所有成员函数均为
constexpr
:可以在常量表达式的求值过程中创建和使用
std::flat_map
对象。
然而,
|
(自 C++26 起) |
目录 |
迭代器失效
| 本节内容尚不完整 |
模板参数
| 键类型 | - |
键的类型。若
Key
与
KeyContainer::value_type
类型不同,则程序非良构。
|
| 值类型 | - |
映射值的类型。若
T
与
MappedContainer::value_type
类型不同,则程序非良构。
|
| 比较器 | - | 提供严格弱序的 Compare 类型。 |
|
键容器
值容器 |
- |
用于存储键和映射值的底层
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_map
(公开成员函数) |
|
|
(析构函数)
(隐式声明)
|
销毁容器适配器的每个元素
(公开成员函数) |
|
为容器适配器赋值
(公开成员函数) |
|
元素访问 |
|
|
访问指定元素(带边界检查)
(公开成员函数) |
|
|
访问或插入指定元素
(公开成员函数) |
|
迭代器 |
|
|
返回指向起始位置的迭代器
(公开成员函数) |
|
|
返回指向末尾的迭代器
(公开成员函数) |
|
|
返回指向起始位置的反向迭代器
(公开成员函数) |
|
|
返回指向末尾的反向迭代器
(公开成员函数) |
|
容量 |
|
|
检查容器适配器是否为空
(公开成员函数) |
|
|
返回元素数量
(公开成员函数) |
|
|
返回可能容纳的最大元素数
(公开成员函数) |
|
修饰符 |
|
|
原地构造元素
(公开成员函数) |
|
|
使用提示原位构造元素
(公开成员函数) |
|
|
若键不存在则就地插入,若键存在则不执行任何操作
(公开成员函数) |
|
|
插入元素
(公开成员函数) |
|
|
插入元素范围
(公开成员函数) |
|
|
插入元素,若键已存在则进行赋值操作
(公开成员函数) |
|
|
提取底层容器
(公开成员函数) |
|
|
替换底层容器
(公开成员函数) |
|
|
删除元素
(公开成员函数) |
|
|
交换内容
(公开成员函数) |
|
|
清空内容
(公开成员函数) |
|
查找 |
|
|
根据特定键查找元素
(公开成员函数) |
|
|
返回匹配特定键的元素数量
(公开成员函数) |
|
|
检查容器是否包含特定键对应的元素
(公开成员函数) |
|
|
返回指向第一个
不小于
给定键的元素的迭代器
(公开成员函数) |
|
|
返回指向首个
大于
给定键的元素的迭代器
(公开成员函数) |
|
|
返回匹配特定键的元素范围
(公开成员函数) |
|
观察器 |
|
|
返回用于比较键的函数
(公开成员函数) |
|
返回用于比较
value_type
类型对象中键的函数
(公开成员函数) |
|
|
直接访问底层键容器
(公开成员函数) |
|
|
直接访问底层值容器
(公开成员函数) |
|
非成员函数
|
(C++23)
|
按字典序比较两个
flat_map
的值
(函数模板) |
|
(C++23)
|
特化
std::swap
算法
(函数模板) |
|
(C++23)
|
擦除满足特定条件的所有元素
(函数模板) |
辅助类
|
特化
std::uses_allocator
类型特征
(类模板特化) |
标签
|
(C++23)
|
表示范围中的元素已排序且唯一
(标签) |
推导指引
注释
成员类型
iterator
和
const_iterator
可能是同一类型的别名。这意味着使用这两种类型作为参数类型定义一对函数重载可能违反
One Definition Rule
。由于
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_map
|
示例
|
本节内容不完整
原因:缺少示例 |
另请参阅
|
(C++23)
|
适配两个容器以提供按键排序的键值对集合
(类模板) |
|
按键排序的键值对集合,键具有唯一性
(类模板) |
|
|
(C++11)
|
通过哈希存储的键值对集合,键具有唯一性
(类模板) |