hash_map 类
备注
此 API 已过时。替代为 unordered_map 类。
存储并快速检索一个集合。该集合的每个元素都是一对值唯一的一个排序关键字和关联的数据值。
template <
class Key,
class Type,
class Traits=hash_compare<Key, less<Key> >,
class Allocator=allocator<pair <const Key, Type> >
>
class hash_map
参数
Key
要存储在 hash_map 的键数据类型。Type
要存储在 hash_map 中的元素数据类型。Traits
类型包括两个函数对象,一个类比较能够比较两个元素值的排序键来确定它们的相对顺序,哈希函数是一个一元映射,将类型为size_t的元素映射为无符号整数。 该参数是可选的,并且默认值为 hash_compare<Key, less<Key> >。Allocator
表示存储分配器对象的类型,该对象封装有关哈希映射的内存分配和解除分配的详细信息。 该参数是可选的,并且默认值为分配算符 <pair<Key, Type>>。
备注
hash_map 是:
一个关联容器,可变大小容器支持基于一个关联的键值的元素值有效的检索。
可逆的,因为它提供了双向迭代器来访问其元素。
哈希的,因为其元素分组到基于哈希函数的值的存储桶,哈希函数将应用到元素的键值。
唯一来讲,其元素中的每一个都必须具有一个唯一键。
一对关联的容器,因为元素数据值与其键值是不同的。
模板类,因为它提供的功能是泛型的,所以包含独立于特定类型的数据元素或键。 相反,将被使用的数据元素或键的数据类型,规定为模板中的比较函数和分配器的参数。
哈希排序的主要优点效率更高;成功的哈希表现在在常量平均时间内插入,删除和查找,而与之相比较的与容器内的元素的个数的对数成比例。 可以直接更改hash_map 的一个元素的值,但是不是其关联的键值。 相反,与旧元素关联的值一定要删除,并且插入与新元素关联的新值。
容器类型选择通常应根据应用程序所需的搜索和插入的类型。 哈希的关联容器对于查找、插入和删除操作进行了优化。 当使用一个精心设计的哈希函数,显式支持这些操作的成员函数是有效的,执行它们的时间为不依赖于容器中元素数的平均常量。 一个精心设计的哈希函数生成哈希值的均匀分布并尽可能减少冲突数,不同键值映射到同一个哈希值时将发生冲突。 在最糟糕的情况下,使用最糟糕的哈希函数,操作的数量与队列中元素数成比例 (线性时间)。
在键的关联值的条件满足应用程序时,hash_map 应为关联容器选择。 这种结构的模型是有序列表。提供定义关联的字符串值的唯一地发生的关键字。 相反的,如果单词有多个正确的定义,键不是唯一的,则 hash_multimap 是容器选择。 则另一方面,如果存储在列表中,则 hash_set为正确的容器。 如果运行的多个匹配项允许,则 hash_multiset 是相应容器结构。
通过调用存储的哈希 Traits 对象value_compare类,hash_map排序控制的队列。 存储的对象可以通过调用成员函数key_comp访问。 这样一个函数对象必须与 hash_compare<Key, less<Key>>类对象表现一致。 特别的,对于所有Key类型的Key值,Traits(Key ) 调用产生size_t类值分布。
通常,元素仅需小于比较以进行排序,因此,给定任意两个元素,可以确定它们是相等的(即两者均不小于对方)或其中一个小于另一个。 这将导致在非等效元素之间进行排序。 在技术声明,比较函数是生成强弱顺序在标准数学有意义的二进制性质。 二元谓词 f(x y) 是一个函数对象,该函数对象有两个参数x和y,回调值true 或 false。 如果二元谓词是自反,反对称和传递的,对 hash_map 施加的排序是强弱顺序,并且如果等效性是可传递的,当两 f 时 (x、y) 和 f (y, x) 是假的,其中两个对象 x 和 y 定义等效。 如果相等性的更强的情况在项之间的替换该等效性,则排序成为总 (来讲所有元素排序有关彼此),并匹配的键彼此将难以辨别的。
组件实际对控件序列的取决于哈希函数、排序的函数并在容器对象存储的哈希表的当前范围。 无法确定哈希表的当前范围,因此,您通常无法预测元素对控件的序列。 插入元素不会使迭代器失效,并且,移除元素只有在这些迭代器指向已移除元素的时候失效。
由的hash_map类提供的迭代器是双向迭代器,但是类的成员函数插入和的hash_map有需要的模板参数较弱的输入迭代器,其功能要求比由类双向迭代器保证更多的最低版本。 不同的迭代器概念组成一个系列,与其功能的改进有关。 每个迭代器概念有它自己的一套要求,并与他们合作的算法必须根据要求限制他们的假设,要求由该类型的迭代器所提供。 可以采用,输入迭代器可以被取消引用引用某些对象,它可以添加到序列中的下一个迭代。 这是一个最小功能集,但它足以能够有意义地谈论的类成员函数的上下文范围的迭代器[First, Last)的。
在Visual C++ .NET 2003中,成员<hash_map> 和 <hash_set> 头文件不再在std命名空间,而是已经进入了stdext命名空间。 有关更多信息,请参见 stdext 命名空间。
构造函数
构造一个hash_map 空字符串或是一些其它 hash_map的全部或者部分复制。 |
Typedef
表示 allocator 类型的类型 hash_map 对象。 |
|
提供可读取hash_map中 const 元素的双向迭代器的类型。 |
|
一个类型,提供指向一个hash_map中 const 元素的指针。 |
|
提供对存储在hash_map中 const 元素的引用从而读取和执行 const 操作的类型。 |
|
提供可读取hash_map中任意 const 元素的双向迭代器的类型。 |
|
可用于表示通过迭代器指向的元素之间的范围内的hash_map的元素的数目有符号的整数类型。 |
|
提供可读取或修改 hash_map 对象中的任意元素的双向迭代器的类型。 |
|
提供函数对象,可以比较两个排序键以确定hash_map两个元素的相对顺序。 |
|
描述构成的hash_map的每个元素的排序键对象的类型。 |
|
表示一类存储在 hash_map 中的数据类型。 |
|
向 hash_map 中的元素提供指针的一种类型。 |
|
提供对存储在hash_map中的元素的引用的类型。 |
|
提供可读取或修改反向的 hash_map 对象中的任意元素的双星迭代器的类型。 |
|
hash_map中能表示元素数的无符号整数类型。 |
|
提供函数对象,可以比较两个排序键以确定hash_map两个元素的相对顺序。 |
成员函数
在 hash_map 中查找具有指定键值的元素。 |
|
返回处理hash_map中第一个元素的迭代器。 |
|
返回一个常量迭代器,此迭代器用于发现hash_map中的首个元素。 |
|
返回一个常量迭代器,此迭代器用于发现hash_map中最后一个元素后的位置。 |
|
清除 hash_map 的所有元素。 |
|
返回hash_map 中的元素数目,它的键匹配指定参数关键字。 |
|
返回一个常量迭代器,此迭代器用于发现反向hash_map中的首个元素。 |
|
返回一个常量迭代器,此迭代器用于发现反向hash_map中最后一个元素后的位置。 |
|
插入构造一个元素到 hash_map。 |
|
插入构造一个元素到 hash_map,附带位置提示。 |
|
如果 hash_map 为空,则测试。 |
|
返回一个迭代器,此迭代器用于发现hash_map中最后一个元素后的位置。 |
|
向前迭代器在有序的范围内(具有大于或等于指定值的值)的第一个元素的位置,其中等效性由二进制谓词指定。 返回一对迭代器,分别为,hash_map中键比指定键大的第一个元素, hash_map中键比指定键大或相等的第一个元素。 |
|
从 hash_map 中指定的位置移除元素或元素范围。 |
|
返回一个迭代器,此迭代器用于定位hash_map中键与指定键相同的元素的位置。 |
|
返回一个 allocator 对象的副本,此对象用于构建hash_map。 |
|
将一个或一个范围的元素插入hash_map。 |
|
返回一个迭代器,hash_map中的键大于等于指定键的第一个元素。 |
|
返回一个迭代器,hash_map中的键大于等于指定键的第一个元素。 |
|
返回hash_map的最大长度 |
|
返回反向hash_map中寻址首个元素的迭代器。 |
|
返回一个迭代器,此迭代器用于发现反向hash_map中最后一个元素后的位置。 |
|
返回hash_map中元素的数目。 |
|
交换两个对象元素 hash_map. |
|
返回一个迭代器,hash_map中的键大于指定键的第一个元素。 |
|
检索hash_map中用于排序元素值的比较对象的副本。 |
运算符
在 hash_map 中插入具有指定键值的元素。 |
|
用另一 hash_map的副本替换 hash_map 的元素。 |
要求
标头: <hash_map>
**命名空间:**stdext