C++ unordered_map容器(STL unordered_map)
阿新 • • 發佈:2018-12-12
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 請求改變容器容量