unordered_multimap 类
此模板类描述用于控制 std::pair<const Key, Ty> 类型的变长元素序列的对象。 序列由哈希函数弱排序,哈希函数将此序列分区到称为存储桶的有序序列集中。 在每个存储桶中,比较函数将确定任一元素对是否具有等效顺序。 每个元素存储两个对象,包括一个排序键和一个值。 序列以允许查找、插入和移除任意元素的方式表示,并包含与序列中的元素数量无关的多个操作(常量时间),至少在所有存储桶长度大致相等时如此。 在最坏情况下,当所有元素位于一个存储桶中时,操作数量与序列中的元素数量成比例(线性时间)。 此外,插入元素不会使迭代器失效,移除元素仅会使指向已移除元素的迭代器失效。
template<class Key,
class Ty,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<Key> >
class unordered_multimap;
参数
参数 |
说明 |
Key |
键类型。 |
Ty |
映射类型。 |
Hash |
哈希函数对象类型。 |
Pred |
相等比较函数对象类型。 |
Alloc |
分配器类。 |
成员
类型定义 |
说明 |
用于管理存储的分配器的类型。 |
|
受控序列的常量迭代器的类型。 |
|
受控序列的常量存储桶迭代器的类型。 |
|
元素的常量指针的类型。 |
|
元素的常量引用的类型。 |
|
两个元素间的带符号距离的类型。 |
|
哈希函数的类型。 |
|
受控序列的迭代器的类型。 |
|
比较函数的类型。 |
|
排序键的类型。 |
|
受控序列的存储桶迭代器的类型。 |
|
与每个键关联的映射值的类型。 |
|
元素的指针的类型。 |
|
元素的引用的类型。 |
|
两个元素间的无符号距离的类型。 |
|
元素的类型。 |
成员函数 |
说明 |
指定受控序列的开头。 |
|
获取键值的存储桶编号。 |
|
获取存储桶数。 |
|
获取存储桶的大小。 |
|
指定受控序列的开头。 |
|
指定受控序列的末尾。 |
|
移除所有元素。 |
|
查找与指定键匹配的元素数。 |
|
添加就地构造的元素。 |
|
添加就地构造的元素,附带提示。 |
|
测试元素是否存在。 |
|
指定受控序列的末尾。 |
|
查找与指定键匹配的范围。 |
|
移除指定位置处的元素。 |
|
查找与指定键匹配的元素。 |
|
获取存储的分配器对象。 |
|
获取存储的哈希函数对象。 |
|
添加元素。 |
|
获取存储的比较函数对象。 |
|
对每个存储桶的平均元素数进行计数。 |
|
获取最大的存储桶数。 |
|
获取或设置每个存储桶的最多元素数。 |
|
获取受控序列的最大大小。 |
|
重新生成哈希表。 |
|
对元素数进行计数。 |
|
交换两个容器的内容。 |
|
构造容器对象。 |
运算符 |
说明 |
复制哈希表。 |
备注
对象通过调用两个存储对象,即一个 unordered_multimap::key_equal 类型的比较函数对象和一个 unordered_multimap::hasher 类型的哈希函数对象,对它控制的序列进行排序。 可以通过调用成员函数 unordered_multimap::key_eq() 访问第一个存储对象;通过调用成员函数 unordered_multimap::hash_function() 访问第二个存储对象。 具体而言,对于所有 Key 类型的值 X 和 Y,key_eq()(X, Y) 调用将仅在两个参数值拥有等效顺序时返回 true;hash_function()(keyval) 调用将生成 size_t 类型的值的分布。 与模板类 unordered_map 类 不同,模板类 unordered_multimap 的对象不确保 key_eq()(X, Y) 对于受控序列的任意两个元素始终为 false。(键不需要唯一。)
此对象还存储最大加载因子,用于指定每个存储桶的元素的最大所需平均数量。 如果插入元素导致 unordered_multimap::load_factor() 超出最大加载因子,容器将增加存储桶的数量并根据需要重新生成哈希表。
受控序列中元素的实际顺序取决于哈希函数、比较函数、插入顺序、最大加载因子和存储桶的当前数量。 通常无法预测受控序列中的元素顺序。 但是,可以始终确保具有等效顺序的任何元素子集在受控序列中相邻。
对象通过 unordered_multimap::allocator_type 类型的存储分配器对象为其控制的序列分配并释放存储。 此分配器对象必须与 allocator 模板类的对象的外部接口相同。 请注意,已分配容器对象时,不复制存储的分配器对象。
要求
标头:<unordered_map>
命名空间: std