STL容器之unordered_map

本文介绍了STL无序容器unordered_map,它包含唯一键值的key/value对。unordered_map作为一个关联数组,与有序的map容器不同。内容涵盖unordered_map的定义、特性,包括其成员类型如key_type、mapped_type、hasher、key_equal,以及分配器类型allocator_type。unordered_map的特性包括键的唯一性、关联性和无序性,元素通过哈希值快速访问。

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

1、定义

        unordered_map为STL中的无序容器,其元素都是key/value pair,每个key只可出现一次,可作为关联式数组。而map则为有序容器。该容器定义如下:

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

参数:

  • Key:键值的类型。unordered_map中的每个元素均由其键值唯一标识。别名为成员类型unordered_map :: key_type。
  • T:映射值的类型。unordered_map中的每个元素用于存储一些数据作为其映射值。别名为成员类型unordered_map :: mapped_type。请注意,这与unordered_map :: value_type不同。
  • Hash:一元函数对象类型,将键类型的对象作为参数,并基于该类型返回唯一大小为size_t的值。这可以是实现函数调用运算符的类,也可以是指向函数的指针。这默认为hash <Key>,它返回一个哈希值,该哈希值的碰撞概率接近1.0 / std :: numeric_limits <size_t> :: max()。所述unordered_map对象使用此函数返回到内部组织它的元素,加快定位各个元件的过程中的散列值。别名为unordered_map :: hasher的成员类型。
  • Pred :一个二进制谓词,它接受两个键类型的参数并返回一个bool。如果将a视为等同于b ,则表达式pred(a,b),其中pred是此类对象,a和b是键值,应返回true。这可以是实现函数调用运算符的类,也可以是指向函数的指针。默认为equal_to <Key>,返回的结果与应用equal-to运算符(a == b)相同。所述unordered_map对象使用此表达式来确定两个元件键是否是等效的。使用此谓词,unordered_map容器中的任何两个元素都不能具有产生true的键。别名为成员类型unordered_map :: key_equal。
  • Alloc:用于定义存储分配模型的分配器对象的类型。默认情况下,使用分配器类模板,该模板定义了最简单的内存分配模型并且与值无关。别名为成员类型unordered_map :: allocator_type。

 

2、特性

  • 唯一性:std::unorederd_map中的元素的键是唯一的。
  • 关联性:std::unorederd_map 是一个关联容器,其中的元素根据键来引用,而不是根据索引来引用。
  • 无序性:在内部,std::unordered_map中的元素不会根据其键值或映射值按任何特定顺序排序,而是根据其哈希值组织到桶中,以允许通过键值直接快速访问各个元素(常量的平均时间复杂度)。

 

3、成员类型及成员函数等

成员类型

成员类型

定义

key_type

Key

mapped_type

T

value_type

std::pair<const Key, T>

size_type

无符号整数类型(通常是 std::size_t )

difference_type

有符号整数类型(通常是 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值