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
对象。
但
|
(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_map
(公开成员函数) |
|
|
(destructor)
(implicitly declared)
|
销毁容器适配器的每个元素
(公开成员函数) |
|
为容器适配器赋值
(公开成员函数) |
|
元素访问 |
|
|
访问指定元素,带边界检查
(公开成员函数) |
|
|
访问或插入指定元素
(公开成员函数) |
|
迭代器 |
|
|
返回指向起始的迭代器
(公开成员函数) |
|
|
返回指向末尾的迭代器
(公开成员函数) |
|
|
返回指向起始的逆向迭代器
(公开成员函数) |
|
|
返回指向末尾的逆向迭代器
(公开成员函数) |
|
容量 |
|
|
检查容器适配器是否为空
(公开成员函数) |
|
|
返回元素数量
(公开成员函数) |
|
|
返回可能的最大元素数量
(公开成员函数) |
|
修改器 |
|
|
原位构造元素
(公开成员函数) |
|
|
使用提示原位构造元素
(公开成员函数) |
|
|
若键不存在则原位插入,若键存在则不执行操作
(公开成员函数) |
|
|
插入元素
(公开成员函数) |
|
|
插入元素范围
(公开成员函数) |
|
|
插入元素,或若键已存在则赋值给当前元素
(公开成员函数) |
|
|
提取底层容器
(公开成员函数) |
|
|
替换底层容器
(公开成员函数) |
|
|
擦除元素
(公开成员函数) |
|
|
交换内容
(公开成员函数) |
|
|
清除内容
(公开成员函数) |
|
查找 |
|
|
</
|
|
非成员函数
|
(C++23)
|
按字典序比较两个
flat_map
的值
(函数模板) |
|
(C++23)
|
特化
std::swap
算法
(函数模板) |
|
(C++23)
|
擦除满足特定条件的所有元素
(函数模板) |
辅助类
|
特化
std::uses_allocator
类型特征
(类模板特化) |
标签
|
(C++23)
|
指示范围中的元素已排序且唯一
(标签) |
推导指引
注释
成员类型
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_map
|
示例
|
本节内容不完整
原因:缺少示例 |
参见
|
(C++23)
|
适配两个容器以提供按键排序的键值对集合
(类模板) |
|
按键排序的键值对集合,键具有唯一性
(类模板) |
|
|
(C++11)
|
通过哈希函数组织键值对,键具有唯一性
(类模板) |