1. 程式人生 > >C++ unordered_map容器(STL unordered_map)

C++ unordered_map容器(STL unordered_map)

unordered_map(無序對映)

C++11標準中加入了unordered系列容器。unordered_map的底層是用雜湊表(又名雜湊)實現。雜湊表利用雜湊函式,將關鍵字的雜湊值都放在一個桶(bucket)裡面,具有相同雜湊值的放到同一個桶。unordered_map內部元素的儲存是無序的,相當於java中的HashMap。

本文簡要總結unordered_map的基本用法,unordered_map很多成員函式的用法類似於map,這裡不再贅述。基本用法可參考這裡->map的詳細總結

unordered_map與map的區別在於:因為底層是由雜湊表實現,所以查詢速度非常快,查詢時間以O(1)計。但是缺點是雜湊表的建立比較耗費時間。所以當查詢比較頻繁的時候可以考慮unordered_map。

[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;

[包含的標頭檔案]

#include<unordered_map>

[迭代器]

unordered_map的迭代器是一個指標,指向容器中的元素,通過迭代器可以訪問元素。

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>) 

unordered_map中元素的鍵值分別是迭代器的first和second的屬性。上面是用迭代器的解引用的方式訪問,也可以用指標訪問運算子直接訪問元素的鍵值。

it->first;               // same as (*it).first   (the key value)
it->second;              // same as (*it).second  (the mapped value) 

[成員函式]

===============================迭代器==========================================

begin         返回指向容器起始位置的迭代器(iterator)
end           返回指向容器末尾的迭代器
cbegin        返回指向容器起始位置的常迭代器(const_iterator)
cend          返回指向容器末尾位置的常迭代器
===============================Capacity========================================
size          返回有效元素的個數
max_size      返回unordered_map支援的最大元素個數
empty         判斷是否為空
===============================訪問元素=========================================
operator[]    訪問元素(不進行下標越界檢查)
at            訪問元素(進行下標越界檢查,增加了效能開銷)
===============================修改元素=========================================
insert        插入元素
erase         刪除元素
swap          交換內容
clear         清空內容
emplace       構造及插入一個元素
emplace_hint  按照提示構造及插入一個元素
================================操作============================================
find          通過給定主鍵查詢元素,沒找到:返回unordered_map::end
count      返回匹配給定主鍵的元素的個數 
equal_range   返回值匹配給定搜尋值的元素組成的範圍 
==============================Buckets===========================================
bucket_count      返回槽(Bucket)數 
max_bucket_count    返回最大槽數 
bucket_size       返回槽大小 
bucket         返回元素所在槽的序號 
load_factor      返回載入因子,即一個元素槽(Bucket)的最大元素數 
max_load_factor    返回或設定最大載入因子 
rehash         設定槽數 
reserve         請求改變容器容量