類模板
<unordered_map>

std::unordered_map

template < class Key,                                    // unordered_map::key_type           class T,                                      // unordered_map::mapped_type           class Hash = hash<Key>,                       // unordered_map::hasher           class Pred = equal_to<Key>,                   // unordered_map::key_equal           class Alloc = allocator< pair<const Key,T> >  // unordered_map::allocator_type           > class unordered_map;
無序對映
無序對映是關聯容器,用於儲存由鍵值對映值組合而成的元素,並允許根據鍵快速檢索單個元素。

unordered_map中,鍵值通常用於唯一標識元素,而對映值是與此關聯的內容物件。對映值的型別可以不同。

在內部,unordered_map中的元素不會相對於它們的對映值進行任何特定順序的排序,而是根據它們的雜湊值組織成,以允許透過它們的鍵值直接快速訪問單個元素(平均時間複雜度為常數)。

unordered_map容器在透過訪問單個元素方面比map容器更快,儘管它們在對其元素的子集進行範圍迭代時通常效率較低。

無序對映實現了直接訪問運算子 (operator[]),它允許使用其鍵值作為引數直接訪問對映值

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

容器屬性

關聯容器
關聯容器中的元素由其引用,而不是由其在容器中的絕對位置引用。
無序
無序容器使用雜湊表來組織其元素,從而允許透過其快速訪問元素。
對映
每個元素將一個關聯到一個對映值:鍵旨在標識其主要內容為對映值的元素。
唯一鍵
容器中沒有兩個元素可以具有等效的
感知分配器
容器使用分配器物件來動態處理其儲存需求。

模板引數

鍵值的型別。每個unordered_map中的元素都由其鍵值唯一標識。
別名為成員型別unordered_map::key_type.
T
對映值的型別。每個unordered_map中的元素都用於儲存一些資料作為其對映值。
別名為成員型別unordered_map::mapped_type。請注意,這與unordered_map::value_type(見下文)不同。
Hash
一個一元函式物件型別,它接受一個鍵型別的物件作為引數,並基於它返回一個size_t型別的唯一值。這可以是一個實現函式呼叫運算子的類,也可以是一個指向函式的指標(示例請參見建構函式)。預設值為hash<Key>,它返回的雜湊值碰撞機率接近1.0/std::numeric_limits<size_t>::max().
要放回的字元的unordered_map物件使用此函式返回的雜湊值來內部組織其元素,從而加快定位單個元素的過程。
別名為成員型別unordered_map::hasher.
Pred
一個二元謂詞,它接受兩個鍵型別的引數並返回一個bool值。表示式pred(a,b)(其中 pred 是此型別的物件,ab 是鍵值)當 a 被認為等效於 b 時應返回true。這可以是一個實現函式呼叫運算子的類,也可以是一個指向函式的指標(示例請參見建構函式)。預設值為equal_to<Key>,它返回與應用等於運算子 (a==b).
要放回的字元的unordered_map) 相同的結果。物件使用此表示式來確定兩個元素鍵是否等效。沒有兩個unordered_map容器中的元素的鍵在使用此謂詞時會產生truetrue
別名為成員型別unordered_map::key_equal.
Alloc
用於定義儲存分配模型的分配器物件型別。預設情況下,使用 allocator 類模板,它定義了最簡單的記憶體分配模型並且與值無關。
別名為成員型別unordered_map::allocator_type.

unordered_map成員函式中,這些相同的名稱(KeyTHashPredAlloc)被假定為模板引數。

指向unordered_map容器元素的迭代器可以訪問對映值。為此,該類定義了所謂的value_type,它是一個 pair 類,其first值對應於型別的const版本(模板引數 Key),其second值對應於對映值(模板引數 T)。
1
typedef pair<const Key, T> value_type;

一個unordered_map容器的迭代器指向這種value_type型別的元素。因此,對於一個名為it的迭代器,它指向map的一個元素,其鍵和對映值可以分別透過以下方式訪問:
1
2
3
4
unordered_map<Key,T>::iterator it;
(*it).first;             // the key value (of type Key)
(*it).second;            // the mapped value (of type T)
(*it);                   // the "element value" (of type pair<const Key,T>) 
當然,任何其他直接訪問運算子,例如->[]都可以使用,例如:
1
2
it->first;               // same as (*it).first   (the key value)
it->second;              // same as (*it).second  (the mapped value) 

成員型別

以下別名是unordered_map的成員型別。它們被成員函式廣泛用作引數和返回型別。

成員型別定義說明
key_type第一個模板引數 ()
mapped_type第二個模板引數 (T)
value_typepair<const key_type,mapped_type>
hasher第三個模板引數 (Hash)預設為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一個指向value_type
const_iterator一個指向const value_type
local_iterator一個指向value_type
const_local_iterator一個指向const value_type
size_type一個無符號整數型別的無符號整數型別,通常與 size_t 一樣
difference_type一個有符號整數型別相同,通常與 ptrdiff_t 一樣
成員型別定義說明
key_type第一個模板引數 ()
mapped_type第二個模板引數 (T)
value_typepair<const key_type,mapped_type>
hasher第三個模板引數 (Hash)預設為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一個指向value_type
const_iterator一個指向const value_type
local_iterator一個指向value_type
const_local_iterator一個指向const value_type
size_type一個無符號整數型別的無符號整數型別,通常與 size_t 一樣
difference_type一個有符號整數型別相同,通常與 ptrdiff_t 一樣

成員函式


容量


迭代器


元素訪問


元素查詢


修改器



雜湊策略


觀察器


非成員函式過載