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 |
有符号整数类型(通常是 |