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