类模板
<unordered_set>

std::unordered_multiset

template < class Key,                         // unordered_multiset::key_type/value_type           class Hash = hash<Key>,            // unordered_multiset::hasher           class Pred = equal_to<Key>,        // unordered_multiset::key_equal           class Alloc = allocator<Key>       // unordered_multiset::allocator_type           > class unordered_multiset;
无序多重集合
无序多重集合是一种容器,它以无特定顺序的方式存储元素,允许基于元素值快速检索单个元素,非常类似于 unordered_set 容器,但允许不同元素具有等效的值。

unordered_multiset,元素的值同时也是其用于标识自身的。键是不可变的,因此,unordered_multiset中的元素一旦进入容器就不能被修改——不过,它们可以被插入和移除。

在内部,unordered_multiset中的元素不会按任何特定顺序排序,而是根据其哈希值被组织到中,以便通过其直接快速访问单个元素(平均时间复杂度为常数)。

具有等效值的元素被分组到同一个桶中,并且其组织方式使得迭代器(参见 equal_range)可以遍历所有这些元素。

容器中的迭代器至少是前向迭代器

请注意,此容器未在自己的头文件中定义,而是与<unordered_set>unordered_set 共享头文件

容器属性

关联容器
关联容器中的元素由其引用,而不是由其在容器中的绝对位置引用。
无序
无序容器使用哈希表来组织其元素,从而允许通过其快速访问元素。
集合 (Set)
元素的值也是用于标识它的
多个等效键
该容器可以持有多个具有等效的元素。
感知分配器
容器使用分配器对象来动态处理其存储需求。

模板参数

元素的类型。一个unordered_multiset中的每个元素也由这个值来标识。
别名为成员类型unordered_multiset::key_typeunordered_multiset::value_type.
哈希
一个一元函数对象类型,它接受一个与元素类型相同的对象作为参数,并根据它返回一个类型为 size_t 的唯一值。这可以是一个实现了函数调用运算符的类,也可以是一个函数指针(参见 构造函数以获取示例)。此参数默认为hash<Key>,它返回的哈希值碰撞概率接近1.0/std::numeric_limits<size_t>::max().
要放回的字符的unordered_multiset对象使用此函数返回的哈希值来内部组织其元素,从而加快定位单个元素的过程。
别名为成员类型unordered_multiset::hasher.
谓词
一个二元谓词,它接受两个与元素类型相同的参数并返回一个bool值。表达式pred(a,b)(其中 pred 是此类型的对象,ab 是键值)当 a 被认为等效于 b 时应返回true如果 a 被认为等效于 b。这可以是一个实现了函数调用运算符的类,也可以是一个函数指针(参见 构造函数以获取示例)。此参数默认为equal_to<Key>,它返回与应用等于运算符 (a==b).
要放回的字符的unordered_multiset对象使用此表达式来确定两个元素键是否等效。此容器支持多个具有等效键的元素。
别名为成员类型unordered_multiset::key_equal.
分配器
用于定义存储分配模型的分配器对象类型。默认情况下,使用 allocator 类模板,它定义了最简单的内存分配模型并且与值无关。
别名为成员类型unordered_multiset::allocator_type.

unordered_multiset的成员函数中,这些相同的名称(KeyHashPredAlloc)被假定为模板参数。

成员类型

以下别名是unordered_multiset的成员类型。它们被成员函数广泛用作参数和返回类型。

成员类型定义说明
key_type第一个模板参数 ()
value_type第一个模板参数 ()key_type
hasher第二个模板参数 (哈希)默认为hash<key_type>
key_equal第三个模板参数 (谓词)默认为equal_to<key_type>
allocator_type第四个模板参数 (分配器)默认为allocator<value_type>
引用Alloc::reference
const_referenceAlloc::const_reference
指针Alloc::pointer对于默认的 allocatorvalue_type*
const_pointerAlloc::const_pointer对于默认的 allocatorconst value_type*
iterator一个指向const value_type* 可转换为const_iterator
const_iterator一个指向const value_type*
local_iterator一个指向const value_type* 可转换为const_local_iterator
const_local_iterator一个指向const value_type*
size_type一个无符号整数类型的无符号整数类型,通常与 size_t 一样
difference_type一个有符号整数类型相同,通常与 ptrdiff_t 一样
成员类型定义说明
key_type第一个模板参数 ()
value_type第一个模板参数 ()key_type
hasher第二个模板参数 (哈希)默认为hash<key_type>
key_equal第三个模板参数 (谓词)默认为equal_to<key_type>
allocator_type第四个模板参数 (分配器)默认为allocator<value_type>
引用value_type&
const_referenceconst value_type&
指针allocator_traits<Alloc>::pointer对于默认的 allocatorvalue_type*
const_pointerallocator_traits<Alloc>::const_pointer对于默认的 allocatorconst value_type*
iterator一个指向const value_type* 可转换为const_iterator
const_iterator一个指向const value_type*
local_iterator一个指向const value_type* 可转换为const_local_iterator
const_local_iterator一个指向const value_type*
size_type一个无符号整数类型的无符号整数类型,通常与 size_t 一样
difference_type一个有符号整数类型相同,通常与 ptrdiff_t 一样
*注意:unordered_multiset 中的所有迭代器都指向 const 元素。无论const_成员类型是否与其非const_对应项是同一类型取决于具体的库实现,但程序不应依赖于它们的不同来重载函数const_iterator更通用,因为iterator总是可以转换为它。
这也同样适用于local_和非local_迭代器类型:它们可能是相同的类型,也可能不是,但程序不应依赖于它们是不同的。

成员函数


容量


迭代器


元素查找


修改器



哈希策略


观察器


非成员函数重载