std::flat_map
定义于头文件 <flat_map> |
||
template< class Key, |
(自 C++23 起) | |
平面映射是一种容器适配器,它提供了一个关联容器的功能,该容器包含键值对,并且键是唯一的。键使用比较函数 Compare
进行排序。
类模板 flat_map
充当两个底层容器的包装器,这两个容器分别作为 KeyContainer
和 MappedContainer
类型的对象传递。第一个容器已排序,并且对于每个键,其对应的值位于第二个容器中的相同索引(偏移量)处。两个容器中的元素数量相同。
标准库在任何地方使用Compare 要求,唯一性通过等价关系确定。非正式地,如果两个对象 a 和 b 都不比另一个小,则认为它们是等价的: !comp(a, b) && !comp(b, a)。
std::flat_map
满足 Container、 ReversibleContainer、 可选容器要求 以及 AssociativeContainer 的所有要求(包括对数搜索复杂度),但以下情况除外:
- 与节点相关的要求不适用,
- 迭代器失效要求不同,
- 插入和擦除操作的复杂度是线性的。
平面映射支持大多数 AssociativeContainer 的使用唯一键的操作。
|
(自 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 起) 和到 value_type 的 random_access_iterator |
const_iterator
|
实现定义的 LegacyInputIterator, ConstexprIterator(自 C++26 起) 和到 const value_type 的 random_access_iterator |
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
可能是同一类型的别名。这意味着使用这两种类型作为形参类型定义一对函数重载可能会违反单一定义规则。由于 iterator
可转换为 const_iterator
,因此使用 const_iterator
作为形参类型的单个函数可以替代。
特性测试 宏 | 值 | Std | 特性 |
---|---|---|---|
__cpp_lib_flat_map |
202207L |
(C++23) | std::flat_map 和 std::flat_multimap |
__cpp_lib_constexpr_containers |
202502L |
(C++26) | constexpr std::flat_map |
[编辑] 示例
本节内容不完整 原因:没有示例 |
[编辑] 参见
(C++23) |
适配两个容器以提供键值对的集合,按键排序 (类模板) |
键值对的集合,按键排序,键是唯一的 (类模板) | |
(C++11) |
键值对的集合,按键哈希,键是唯一的 (类模板) |