hash_multiset (STL/CLR)
模板类描述对象控件访问双向元素的更改长的序列。 使用容器 hash_multiset 管理元素序列用作哈希表,存储双向的每个表项目存储一个元素的连接表节点和每个节点。 每个元素的值用作键,为排序序列。
在如下解释, GValue 相同。 GKey,又是一样的。 Key ,除非后者是 ref 类型,因此,在与 Key^情况下。
template<typename Key>
ref class hash_multiset
: public
System::ICloneable,
System::Collections::IEnumerable,
System::Collections::ICollection,
System::Collections::Generic::IEnumerable<GValue>,
System::Collections::Generic::ICollection<GValue>,
System::Collections::Generic::IList<GValue>,
Microsoft::VisualC::StlClr::IHash<Gkey, GValue>
{ ..... };
参数
- 键
受控序列中元素的键组件的类型。
成员
类型定义 |
说明 |
---|---|
常数的迭代器类型的控制序列的。 |
|
常量的类型对元素。 |
|
常数的反向迭代器类型的控制序列的。 |
|
(可以签名) 的距离的类型两个元素间的。 |
|
泛型接口的类型的容器。 |
|
一个迭代的类型泛型接口的容器的。 |
|
一个反向迭代器的类型泛型接口的容器的。 |
|
一个元素的类型泛型接口的容器的。 |
|
密钥的哈希委托。 |
|
一个迭代器类型的控制序列的。 |
|
两个密钥的排序委托。 |
|
一个排序的键的类型。 |
|
引用的类型的元素。 |
|
一个反向迭代器类型的控制序列的。 |
|
(非负) 距离的类型两个元素间的。 |
|
两个元素值的排序委托。 |
|
元素的类型。 |
成员函数 |
说明 |
---|---|
指定受控序列的开头。 |
|
计数存储桶的数目。 |
|
移除所有元素。 |
|
计数与指定的键的元素。 |
|
测试组件是否不存在。 |
|
指定受控序列的末尾。 |
|
查找与指定的键的范围。 |
|
移除指定位置处的元素。 |
|
查找与指定键匹配的元素。 |
|
复制密钥的哈希委托。 |
|
构造容器对象。 |
|
添加元素。 |
|
复制两个密钥的排序委托。 |
|
计算平均元素每个存储桶。 |
|
查找与指定的键范围的开头。 |
|
构造值对象。 |
|
获取或设置最大元素每个存储桶。 |
|
指定反转的受控序列的开头。 |
|
重新生成哈希表。 |
|
指定反转的受控序列的末尾。 |
|
计算元素的数量。 |
|
交换两个容器的内容。 |
|
复制控件序列到新数组。 |
|
查找与指定的键范围的末尾。 |
|
复制两个元素值的排序委托。 |
运算符 |
说明 |
---|---|
替换控件序列。 |
接口
接口 |
说明 |
---|---|
重复的对象。 |
|
顺序排列元素。 |
|
维护元素组。 |
|
顺序排列类型元素。 |
|
维护类型元素的组。 |
|
IHash<键,值> |
维护泛型容器。 |
备注
对象分配和它所控制该序列中未使用记忆字段,而在双向单独的节点连接表。 若要加快访问,对象还维护更改长一些指向列表 (哈希表),有效地管理整个列表作为子表顺序或存储桶。 它将元素插入到它将保留的存储桶中通过修改节点之间的链接单时,传递复制一个节点内容到另一个。 这表示您可以自由插入和移除元素,而不会干扰的其余元素。
它通过调用类型 hash_set::key_compare (STL/CLR)一个单元的委托对象控件的对象对每个存储桶。 ,当构造 hash_set 时,可以指定存储的委托对象;如果不指定委托对象,则默认值为比较 operator<=(key_type, key_type)。
您访问存储区的委托对象通过调用成员函数 hash_set::key_comp (STL/CLR)()。 此委托对象必须定义等效排序类型之间 hash_set::key_type (STL/CLR)键。 这意味着,任何两个密钥的 X 和 Y:
key_comp()(X, Y) 返回在每同一个布尔值结果调用。
如果 key_comp()(X, Y) && key_comp()(Y, X) 为 true,则 X 和 Y 添加具有等效排序。
的行为与 operator<=(key_type, key_type)、 operator>=(key_type, key_type) 或 operator==(key_type, key_type) 的所有排序的规则定义 eqivalent 排序。
请注意容器只保证键有排序的等效元素 (,对同一个整数值的哈希) 在存储桶中相邻的。 不同于模板类 hash_set (STL/CLR),模板类 hash_multiset 对象不需要任何元素的键是唯一的。 (两个或多个键可以具有等效项排序。)
对象确定哪个存储桶应通过调用类型 hash_set::hasher (STL/CLR)一个单元的委托对象包含特定排序的键。 您访问该存储区的对象通过调用成员函数 hash_set::hash_delegate (STL/CLR)() 获取依赖于键值的整数值。 ,当构造 hash_set 时,可以指定存储的委托对象;如果不指定委托对象,则默认值为函数 System::Object::hash_value(key_type)。 这意味着,任何键的 X 和 Y:
hash_delegate()(X) 返回在每个相同的整数结果调用。
如果 X 和 Y 具有等效排序,则 hash_delegate()(X) 应返回整数结果和 hash_delegate()(Y)相同。
每个元素用作键和值。 序列表示为允许查找、任意元素插入和删除与许多操作的是元素数依赖于序列的方法 (常数时)。--至少在以下情况下最好。 而且,请插入元素不会使迭代器,并且,移除元素无效点在被移除的元素的那些迭代器。
如果没有统一分配哈希值,但是,哈希表可以降低。 非常--对始终返回相同的值的哈希函数--查找、插入和删除与元素数成比例在序列 (线性时间)。 容器竭力选择一个合理的哈希函数、平均存储桶大小和 hashtable 范围 (存储桶的总数),但是,您可以重写或所有这些选择。 请参见,例如,函数 hash_set::max_load_factor (STL/CLR) 和 hash_set::rehash (STL/CLR)。
hash_multiset 支持双向迭代器,这意味着可以单步执行给定的相邻元素迭代器指定在控件序列的元素。 特定头节点相对应 hash_multiset::end (STL/CLR)返回的迭代器()。 如果可以减少此迭代器达到控件序列的最后一个元素,。 可以增加 hash_multiset 迭代器达到头节点,,并且与 end()然后将相等。 ,但不能取消引用 end()返回的迭代器。
请注意您不能引用直接给定的 hash_multiset 元素其数字位置--它需要一个随机访问迭代器。
hash_multiset 迭代器存储的句柄。其关联的 hash_multiset 节点,然后存储的句柄到其关联的容器。 您只能使用迭代器与其关联的容器对象。 ,只要其关联的 hash_multiset 节点与某些 hash_multiset, hash_multiset 迭代器保持有效。 此外,有效的迭代器 dereferencable--可以使用以便为它指定的访问或修改元素值--只要它与 end()不相等。
清除或移除元素调用其存储的值的析构函数。 销毁容器清除所有元素。 因此,元素类型为 ref 类的容器以确保组件不活动得比容器时间。 但是,请注意,容器处理执行 not 销毁其元素。
要求
标题: <cliext/hash_set>
命名空间: cliext