類模板
<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_迭代器型別:它們可能相同,也可能不同,但程式不應依賴它們的不同。

成員函式


容量


迭代器


元素查詢


修改器



雜湊策略


觀察器


非成員函式過載