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