类模板
<unordered_map>

std::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;
无序映射
无序映射是关联容器,用于存储由键值映射值组合而成的元素,并允许根据键快速检索单个元素。

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

在内部,unordered_map中的元素不会相对于它们的映射值进行任何特定顺序的排序,而是根据它们的哈希值组织成,以允许通过它们的键值直接快速访问单个元素(平均时间复杂度为常数)。

unordered_map容器在通过访问单个元素方面比map容器更快,尽管它们在对其元素的子集进行范围迭代时通常效率较低。

无序映射实现了直接访问运算符 (operator[]),它允许使用其键值作为参数直接访问映射值

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

容器属性

关联容器
关联容器中的元素由其引用,而不是由其在容器中的绝对位置引用。
无序
无序容器使用哈希表来组织其元素,从而允许通过其快速访问元素。
映射
每个元素将一个关联到一个映射值:键旨在标识其主要内容为映射值的元素。
唯一键
容器中没有两个元素可以具有等效的
感知分配器
容器使用分配器对象来动态处理其存储需求。

模板参数

键值的类型。每个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值。表达式pred(a,b)(其中 pred 是此类型的对象,ab 是键值)当 a 被认为等效于 b 时应返回true。这可以是一个实现函数调用运算符的类,也可以是一个指向函数的指针(示例请参见构造函数)。默认值为equal_to<Key>,它返回与应用等于运算符 (a==b).
要放回的字符的unordered_map) 相同的结果。对象使用此表达式来确定两个元素键是否等效。没有两个unordered_map容器中的元素的键在使用此谓词时会产生truetrue
别名为成员类型unordered_map::key_equal.
Alloc
用于定义存储分配模型的分配器对象类型。默认情况下,使用 allocator 类模板,它定义了最简单的内存分配模型并且与值无关。
别名为成员类型unordered_map::allocator_type.

unordered_map成员函数中,这些相同的名称(KeyTHashPredAlloc)被假定为模板参数。

指向unordered_map容器元素的迭代器可以访问映射值。为此,该类定义了所谓的value_type,它是一个 pair 类,其first值对应于类型的const版本(模板参数 Key),其second值对应于映射值(模板参数 T)。
1
typedef pair<const Key, T> value_type;

一个unordered_map容器的迭代器指向这种value_type类型的元素。因此,对于一个名为it的迭代器,它指向map的一个元素,其键和映射值可以分别通过以下方式访问:
1
2
3
4
unordered_map<Key,T>::iterator it;
(*it).first;             // the key value (of type Key)
(*it).second;            // the mapped value (of type T)
(*it);                   // the "element value" (of type pair<const Key,T>) 
当然,任何其他直接访问运算符,例如->[]都可以使用,例如:
1
2
it->first;               // same as (*it).first   (the key value)
it->second;              // same as (*it).second  (the mapped value) 

成员类型

以下别名是unordered_map的成员类型。它们被成员函数广泛用作参数和返回类型。

成员类型定义说明
key_type第一个模板参数 ()
mapped_type第二个模板参数 (T)
value_typepair<const key_type,mapped_type>
hasher第三个模板参数 (Hash)默认为hash<key_type>
key_equal第四个模板参数 (Pred)默认为equal_to<key_type>
allocator_type第五个模板参数 (Alloc)默认为allocator<value_type>
引用Alloc::reference
const_referenceAlloc::const_reference
指针Alloc::pointer对于默认的 allocatorvalue_type*
const_pointerAlloc::const_pointer对于默认的 allocatorconst value_type*
iterator一个指向value_type
const_iterator一个指向const value_type
local_iterator一个指向value_type
const_local_iterator一个指向const value_type
size_type一个无符号整数类型的无符号整数类型,通常与 size_t 一样
difference_type一个有符号整数类型相同,通常与 ptrdiff_t 一样
成员类型定义说明
key_type第一个模板参数 ()
mapped_type第二个模板参数 (T)
value_typepair<const key_type,mapped_type>
hasher第三个模板参数 (Hash)默认为hash<key_type>
key_equal第四个模板参数 (Pred)默认为equal_to<key_type>
allocator_type第五个模板参数 (Alloc)默认为allocator<value_type>
引用value_type&
const_referenceconst value_type&
指针allocator_traits<Alloc>::pointer对于默认的 allocatorvalue_type*
const_pointerallocator_traits<Alloc>::const_pointer对于默认的 allocatorconst value_type*
iterator一个指向value_type
const_iterator一个指向const value_type
local_iterator一个指向value_type
const_local_iterator一个指向const value_type
size_type一个无符号整数类型的无符号整数类型,通常与 size_t 一样
difference_type一个有符号整数类型相同,通常与 ptrdiff_t 一样

成员函数


容量


迭代器


元素访问


元素查找


修改器



哈希策略


观察器


非成员函数重载