std::flat_multimap
定义在头文件 <flat_map> 中 |
||
template< class Key, |
(自 C++23 起) | |
扁平多重映射是一种 容器适配器,它提供了关联容器的功能,该容器包含键值对,同时允许具有相同键值的多个条目。键使用比较函数 Compare
进行排序。
类模板 flat_multimap
充当两个底层容器的包装器,分别作为 KeyContainer
和 MappedContainer
类型的对象传递。第一个容器已排序,并且对于每个键,其相应的 value 位于第二个容器中的相同索引(偏移量)处。两个容器中的元素数量相同。
标准库在任何使用 Compare 要求的地方,都会使用等价关系来确定唯一性。非正式地,如果两个对象 a 和 b 都不比对方小,则它们被认为是等价的: !comp(a, b) && !comp(b, a).
std::flat_multimap
满足 Container、ReversibleContainer、可选容器要求 和 AssociativeContainer(包括对数搜索复杂度)的所有要求,除了:
- 与节点相关的要求不适用,
- 迭代器失效要求不同,
- 插入和删除操作的复杂度为线性。
扁平多重映射支持大多数使用相同键的 AssociativeContainer 操作。
内容 |
[编辑] 迭代器失效
本节内容不完整 |
[编辑] 模板参数
键 | - | 键的类型。如果 Key 与 KeyContainer::value_type 类型不同,则程序将格式不正确。 |
T | - | 映射值的类型。如果 T 与 MappedContainer::value_type 类型不同,则程序将格式不正确。 |
比较 | - | 一个 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 |
迭代器
|
实现定义的 LegacyInputIterator 和 random_access_iterator 到 value_type |
const_iterator
|
实现定义的 LegacyInputIterator 和 random_access_iterator 到 const value_type |
reverse_iterator
|
std::reverse_iterator<iterator> |
const_reverse_iterator
|
std::reverse_iterator<const_iterator> |
容器
|
描述底层容器的类型 struct containers |
[编辑] 成员类
比较 value_type 类型的对象(类) |
[编辑] 成员对象
成员名称 | 定义 |
c (私有) |
containers 类型的对象((仅供说明的成员对象*) |
compare (私有) |
key_compare 类型的比较函数对象((仅供说明的成员对象*) |
[编辑] 成员函数
构造 flat_multimap (公有成员函数) | |
(析构函数) (隐式声明) |
销毁容器适配器中的每个元素 (公有成员函数) |
将值分配给容器适配器 (公有成员函数) | |
迭代器 | |
返回指向开头的迭代器 (公有成员函数) | |
返回指向末尾的迭代器 (公有成员函数) | |
返回指向开头的反向迭代器 (公有成员函数) | |
返回指向末尾的反向迭代器 (公有成员函数) | |
容量 | |
检查容器适配器是否为空 (公有成员函数) | |
返回元素数量 (公有成员函数) | |
返回可能的最大元素数量 (公有成员函数) | |
修改器 | |
就地构造元素 (公有成员函数) | |
使用提示就地构造元素 (公有成员函数) | |
插入元素 (公有成员函数) | |
插入一系列元素 (公有成员函数) | |
提取底层容器 (公有成员函数) | |
替换底层容器 (公有成员函数) | |
擦除元素 (公有成员函数) | |
交换内容 (公有成员函数) | |
清除内容 (公有成员函数) | |
查找 | |
查找具有特定键的元素 (公有成员函数) | |
返回与特定键匹配的元素数量 (公有成员函数) | |
检查容器是否包含具有特定键的元素 (公有成员函数) | |
返回指向第一个不小于给定键的元素的迭代器 (公有成员函数) | |
返回指向第一个大于给定键的元素的迭代器 (公有成员函数) | |
返回与特定键匹配的元素范围 (公有成员函数) | |
观察者 | |
返回比较键的函数 (公有成员函数) | |
返回比较 value_type 类型的对象中的键的函数(公有成员函数) | |
直接访问底层键容器 (公有成员函数) | |
直接访问底层值容器 (公有成员函数) |
[编辑] 非成员函数
(C++23) |
按字典顺序比较两个 flat_multimap 的值(函数模板) |
专门化 std::swap 算法 (函数模板) | |
(C++23) |
擦除满足特定条件的所有元素 (函数模板) |
[编辑] 辅助类
专门化了 std::uses_allocator 类型特征 (类模板特化) |
[编辑] 标签
指示范围内的元素已排序(不需要唯一性) (标签) |
[编辑] 推导指南
[编辑] 注释
成员类型 iterator
和 const_iterator
可能是同一类型的别名。这意味着使用这两种类型作为参数类型的函数重载对可能会违反 单一定义规则。由于 iterator
可转换为 const_iterator
,因此可以使用一个具有 const_iterator
作为参数类型的函数来代替。
功能测试 宏 | 值 | Std | 功能 |
---|---|---|---|
__cpp_lib_flat_map |
202207L | (C++23) | std::flat_map 和 std::flat_multimap |
[编辑] 示例
本节内容不完整 原因:没有示例 |
[编辑] 另请参阅
(C++23) |
调整两个容器以提供键值对集合,按唯一键排序 (类模板) |
键值对集合,按键排序 (类模板) | |
(C++11) |
键值对集合,按键哈希 (类模板) |