类模板
<unordered_set>

std::unordered_set

template < class Key,                        // unordered_set::key_type/value_type           class Hash = hash<Key>,           // unordered_set::hasher           class Pred = equal_to<Key>,       // unordered_set::key_equal           class Alloc = allocator<Key>      // unordered_set::allocator_type           > class unordered_set;
无序集
无序集是容器,它们以任何特定顺序存储唯一元素,并且允许根据其值快速检索单个元素。

unordered_set,元素的 值同时也是其 ,它唯一地标识了它。键是不可变的,因此,容器中的元素unordered_set一旦进入容器就不能被修改——但是它们可以被插入和删除。

在内部,unordered_set不按任何特定顺序排序,而是根据其哈希值组织成 ,以便能够直接通过其 快速访问单个元素(平均具有恒定的平均时间复杂度)。

unordered_set容器比 set 容器更快地通过其 访问单个元素,尽管它们在范围迭代其部分元素方面通常效率较低。

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

容器属性

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

模板参数

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

unordered_set成员函数,假定模板参数具有相同的名称(KeyHashPredAlloc)。

成员类型

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

成员类型定义说明
key_type第一个模板参数 ()
value_type第一个模板参数 ()key_type
hasher第二个模板参数 (哈希)默认为hash<key_type>
key_equal第三个模板参数 (Pred)默认为equal_to<key_type>
allocator_type第四个模板参数 (Alloc)默认为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第三个模板参数 (Pred)默认为equal_to<key_type>
allocator_type第四个模板参数 (Alloc)默认为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_set)中的所有迭代器都指向 const 元素。是否const_成员类型是否与其非const_对应项是同一类型取决于具体的库实现,但程序不应依赖于它们的不同来重载函数const_iterator更通用,因为iterator总是可以转换为它。
同样适用于local_和非local_迭代器类型:它们可能相同,也可能不同,但程序不应依赖它们的不同。

成员函数


容量


迭代器


元素查找


修改器



哈希策略


观察器


非成员函数重载