Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

unordered_map

类模板   <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;
无序map

无序映射是一种关联容器,它存储由键值和映射值的组合形成的元素,允许基于键快速检索单个元素。

在unordered_map中,键值通常用于唯一标识元素,而映射值是一个具有与该键关联的内容的对象。 键和映射值的类型可能不同。
在内部,unordered_map 中的键和值没有按照任何特定的顺序排序,而是根据它们的哈希值将它们组织到bucket中, 从而允许直接通过它们的键值快速访问单个元素(平均时间复杂度为常数)。

unordered_map容器通过键访问单个元素的速度比map容器快,但是它们在遍历元素子集的范围迭代时通常效率较低。

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

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

☲  容器特性


关联
关联容器中的元素是通过键引用的,而不是通过它们在容器中的绝对位置引用的。
无序
无序容器使用哈希表来组织元素,允许通过键快速访问元素。
映射
每个元素将一个键与一个映射值相关联:键用于标识主要内容为映射值的元素。
键唯一
容器中没有两个元素具有相同的键.
分配器
容器使用allocator对象动态地处理其存储需求。。

☲  模板参数


Key
键值的类型。unordered_map 容器中的每个元素也是由这个值唯一标识的。
成员类型 unordered_map::key_type的别名.
T
映射值的类型。unordered_map中的每个元素用于存储一些数据作为其映射值。
成员类型 unordered_map::mapped_type。注意,这与unordered_map::value_type不同(参见下面).
Hash
一种一元函数对象类型,它接受一个Key类型的对象作为参数,并基于该对象返回size_t类型的唯一值。 这可以是实现函数调用操作符的类,也可以是指向函数的指针(参见构造函数的示例)。
默认为 hash<Key>,它返回一个哈希值, 冲突的概率接近 1.0/std::numeric_limits<size_t>::max()
unordered_map 对象使用此函数返回的哈希值在内部组织元素,加快查找单个元素的过程。
成员类型 unordered_map:: hashher 的别名.
Pred
一个二元谓词,接受两个Key类型的参数,并返回布尔值。
表达式pred(a,b),其中pred是该类型的一个对象,ab是键值, 如果a被认为与b等价,则返回true
这可以是实现函数调用操作符的类,也可以是指向函数的指针(参见构造函数的示例)。
默认为equal_to<Key>,其返回值与应用 equal-to operator(a==b)相同。

unordered_map对象使用这个表达式来确定两个元素键是否相等。
unordered_map容器中不能有两个元素的键使用该谓词生成true

成员类型 unordered_map::key_equal 的别名。
Alloc
用于定义存储分配模型的 allocator 对象的类型。 默认情况下, 使用 allocator 类模板,它定义了最简单的内存分配模型,并且与值无关。
别名为成员类型 unordered_map::allocator_type.

在unordered_map成员函数的引用中,这些相同的名称(KeyHashPredAlloc)被假定为模板形参。
unordered_map容器元素的迭代器可以同时访问键和映射的值。为此,类定义了所谓的value_type, 它是一个pair类,第一个值对应于键类型的const版本(模板形参key),第二个值对应于映射值(模板形参T):
typedef pair<const Key, T> value_type;
unordered_map容器的迭代器指向这个value_type类型的元素。 因此,对于一个名为it的指向map元素的迭代器,它的键和映射值可以通过以下方式分别访问:
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>)
当然,可以使用任何其他直接访问操作符,例如->或[],例如:
it->first;               // same as (*it).first   (the key value)
it->second;              // same as (*it).second  (the mapped value) 

☉  成员类型


以下别名是unordered_map的成员类型。它们被广泛用作成员函数的形参和返回类型:
C++11:
成员类型 定义 注释
key_type 起始模板参数(Key)
mapped_type 第二个模板参数(T)
value_type pair<const key_type,mapped_type>
hasher 第三个模板参数(Hash) defaults to: hash<key_type>
key_equal 第四个模板参数(Pred) 默认为:equal_to <key_type>
allocator_type 第五个模板参数(Alloc) 默认为:allocator<value_type>
reference Alloc::reference
const_reference Alloc::const_reference
pointer Alloc::pointer 默认分配器:value_type*
const_pointer Alloc::const_pointer 默认分配器:const value_type*
iterator 指向const value_type的前向迭代器
const_iterator 指向const value_type的前向迭代器
local_iterator 指向const value_type的前向迭代器
const_local_iterator 指向const value_type的前向迭代器
difference_type 一种有符号整型 通常与ptrdiff_t相同
size_type 无符号整型 通常与size_t相同

☞ 成员函数



(constructor) unordered_map构造函数 (公众成员函数)
(destructor) unordered_map析构函数(公众成员函数)
operator= 复制容器内容(公众成员函数)

迭代器:
begin 返回一个指向unordered_map容器或其中一个桶开头的迭代器 (公众成员函数)
end 返回一个指向unordered_map容器或其中一个桶末尾元素的下一个元素的迭代器 (公众成员函数)
cbegin 返回一个指向unordered_map容器或其中一个桶开头的常量迭代器 (公众成员函数)
cend 返回一个指向unordered_map容器或其中一个桶末尾元素的下一个元素的常量迭代器 (公众成员函数)
容量:
empty 测试容器是否为空 (公众成员函数)
size 返回容量 (公众成员函数)
max_size 返回最大元素容量(公众成员函数)
元素访问:
operator[] 访问元素 (公众成员函数)
at 访问元素 (公众成员函数)
查找元素:
find 获取元素的迭代器 (公众成员函数)
count 计数具有特定键的元素 (公众成员函数)
equal_range 获取具有特定键的元素范围(公众成员函数)
修改器:
insert 插入元素(公众成员函数)
erase 删除元素(公众成员函数)
swap 交换内容(公众成员函数)
clear 清除内容(公众成员函数)
emplace 构造和插入元素(公众成员函数)
emplace_hint 构造插入元素并加提示(公众成员函数)
查看:
hash_function 获取哈希函数(公众成员函数)
key_eq 获取键的等价谓词(公众成员函数)
get_allocator 获取分配器(公众成员函数)
存储桶:
bucket_count 返回存储桶的数量(公众成员函数)
max_bucket_count 返回存储桶的最大数量(公众成员函数)
bucket_size 返回存储桶的容量(公众成员函数)
bucket 定位元素的存储桶(公众成员函数)
哈希策略:
load_factor 返回存储桶的元素平均数量(负载系数)(公众成员函数)
max_load_factor 获取或设置存储桶最大的负载系数(公众成员函数)
rehash 设置存储桶数(公众成员函数)
reserve 重组存储桶(公众成员函数)
非成员函数重载:
operators (unordered_map) unordered_map的关系操作符(函数模板)
swap (unordered_map) 交换两个unordered_map容器的内容(函数模板)

联系我们 免责声明 关于CandCplus 网站地图