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