unordered_multimap类

本文详细介绍了C++标准库中的unordered_multimap容器,解释了其内部结构、如何使用以及与其他容器的区别。unordered_multimap允许存储具有等效键的多个元素,使用哈希表组织元素以实现快速查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unordered_multimap

头文件unordered_map

template < class Key,                                    // unordered_multimap::key_type
           class T,                                      // unordered_multimap::mapped_type
           class Hash = hash<Key>,                       // unordered_multimap::hasher
           class Pred = equal_to<Key>,                   // unordered_multimap::key_equal
           class Alloc = allocator< pair<const Key,T> >  // unordered_multimap::allocator_type
           > class unordered_multimap;

unordered_multimap是关联容器,它存储由键值和映射值组合形成的元素,非常类似于unordered_map容器,但允许不同的元素具有等效键。

在unordered_multimap中,键值通常用于唯一标识元素,而映射值是具有与此键关联的内容的对象。键和映射值的类型可能不同。

在内部,unordered_multimap中的元素没有按照其键值或映射值按任何特定顺序排序,而是根据其哈希值组织到桶中,以允许通过键值直接快速访问各个元素(使用常量)平均时间复杂度)。

具有等效键的元素在同一个桶中组合在一起,并且迭代器(请参阅equal_range)可以遍历所有这些元素。

容器中的迭代器至少是前向迭代器。

请注意,此容器未在其自己的标头中定义,但与unordered_map共享头文件<unordered_map>。

容器属性

  1. Associative
    关联容器中的元素由其键引用,而不是由它们在容器中的绝对位置引用。
  2. Unordered
    无序容器使用哈希表来组织其元素,这些哈希表允许通过键快速访问元素。
  3. Map
    每个元素将键与映射值相关联:键用于标识主要内容为映射值的元素。
  4. Multiple equivalent keys
    容器可以使用等效键保存多个元素。
  5. Allocator-aware
    容器使用allocator对象来动态处理其存储需求。

模板参数

  1. Key
    键值的类型。 unordered_multimap中的每个元素都由键值标识。
    别名为成员类型unordered_multimap :: key_type。
  2. T
    映射值的类型。 unordered_multimap中的每个元素用于存储一些数据作为其映射值。
    别名为成员类型unordered_multimap :: mapped_type。请注意,这与unordered_multimap :: value_type不同(见下文)。
  3. Hash
    一种一元函数对象类型,它将类型为key类型的对象作为参数,并根据它返回类型为size_t的唯一值。这可以是实现函数调用操作符的类,也可以是指向函数的指针(请参阅构造函数)。这默认为hash ,它返回一个哈希值,其碰撞概率接近1.0 / std :: numeric_limits <size_t> :: max()。
    unordered_multimap对象使用此函数返回的哈希值在内部组织其元素,从而加快了查找单个元素的过程。
    别名为成员类型unordered_multimap :: hasher。
  4. Pred
    一个二元谓词,它接受键类型的两个参数并返回一个bool。表达式pred(a,b),其中pred是这种类型的对象,a和b是键值,如果a被认为等同于b,则返回true。这可以是实现函数调用操作符的类,也可以是指向函数的指针(请参阅构造函数)。默认为equal_to ,返回与应用等于运算符(a == b)相同的值。
    unordered_multimap对象使用此表达式来确定两个元素键是否相等。此容器支持具有等效键的多个元素。
    别名为unordered_multimap :: key_equal的成员类型。
  5. Alloc
    用于定义存储分配模型的分配器对象的类型。默认情况下,使用allocator类模板,该模板定义最简单的内存分配模型,并且与值无关。
    别名为成员类型unordered_multimap :: allocator_type。

在unordered_multimap成员函数的引用中,假定模板参数具有相同的名称(Key,T,Hash,Pred和Alloc)。

成员类型

以下别名是unordered_multimap的成员类型。 它们被成员函数广泛用作参数和返回类型:
【C++11】

成员类型定义备注
key_type第一个模板参数(Key)
mapped_type第二个模板参数(T)
value_typepair<const key_type,mapped_type>
hasher第三个模板参数(Hash)defaults to: hash<key_type>
key_equal第四个模板参数(Pred)defaults to: equal_to<key_type>
allocator_type第五个模板参数(Alloc)defaults to: allocator<value_type>
referenceAlloc::reference
const_referenceAlloc::const_reference
pointerAlloc::pointerfor the default allocator: value_type*
const_pointerAlloc::const_pointerfor the default allocator: const value_type*
iteratorvalue_type的前向迭代器可转换为const_iterator
const_iteratorconst value_type的前向迭代器
local_iteratorvalue_type的前向迭代器可转换为const_local_iterator
const_local_iteratorconst value_type的前向迭代器
size_type无符号整数类型通常与size_t相同
difference_type有符号整数类型通常与ptrdiff_t相同

成员函数

(constructor)构造unordered_map(公共成员函数)
(destructor)破坏unordered_map(公共成员函数)
operator=分配内容(公共成员函数)

容量

empty测试容器是否为空(公共成员函数)
size返回容器大小(公共成员函数)
max_size返回最大大小(公共成员函数)

迭代器

begin返回迭代器的开头(公共成员类型)
end返回迭代器的末尾(公共成员类型)
cbegin返回const_iterator的开头(公共成员函数)
cend返回const_iterator的末尾(公共成员函数)

元素查找

find获取元素的迭代器(公共成员函数)
count使用特定键计数元素(公共成员函数)
equal_range获取具有特定键的元素范围(公共成员函数)

修饰符

emplace构造和插入元素(公共成员函数)
emplace_hint使用提示构造和插入元素(公共成员函数)
insert插入元素(公共成员函数)
erase插入元素(公共成员函数)
clear擦除元素(公共成员函数)
swap交换元素(公共成员函数)

bucket_count返回桶的数量(公共成员函数)
max_bucket_count返回桶的最大数量(公共成员函数)
bucket_size返回桶的大小(公共成员类型)
bucket找到元素的存储桶(公共成员函数)

哈希策略

load_factor返回加载因子(公共成员函数)
max_load_factor获取或设置最大载荷因子(公共成员函数)
rehash设置桶的数量(公共成员函数)
reserve请求更改容量(公共成员函数)

观察

hash_function获取哈希函数(公共成员类型)
key_eq获取关键等价谓词(公共成员类型)
get_allocator获取分配器(公共成员函数)

非成员函数重载

operators (unordered_multimap)unordered_multimap的关系运算符(函数模板)
swap (unordered_multimap)交换两个unordered_multimap容器的内容(函数模板)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值