C++ STL unordered_map解析
C++ 11標(biāo)準(zhǔn)中加入了unordered系列的容器。unordered_map記錄元素的hash值,根據(jù)hash值判斷元素是否相同。map相當(dāng)于java中的TreeMap,unordered_map相當(dāng)于HashMap。無論從查找、插入上來說,unordered_map的效率都優(yōu)于hash_map,更優(yōu)于map;而空間復(fù)雜度方面,hash_map最低,unordered_map次之,map最大。
unordered_map與map的對比:
存儲時(shí)是根據(jù)key的hash值判斷元素是否相同,即unordered_map內(nèi)部元素是無序的,而map中的元素是按照二叉搜索樹存儲(用紅黑樹實(shí)現(xiàn)),進(jìn)行中序遍歷會得到有序遍歷。所以使用時(shí)map的key需要定義operator<。而unordered_map需要定義hash_value函數(shù)并且重載operator==。但是很多系統(tǒng)內(nèi)置的數(shù)據(jù)類型都自帶這些。
unordered_map與hash_map對比:
unordered_map原來屬于boost分支和std::tr1中,而hash_map屬于非標(biāo)準(zhǔn)容器。
unordered_map感覺速度和hash_map差不多,但是支持string做key,也可以使用復(fù)雜的對象作為key。
unordered_map編譯時(shí)gxx需要添加編譯選項(xiàng):--std=c++11
成員函數(shù):
=================迭代器=========================
begin 返回指向容器起始位置的迭代器(iterator)
end 返回指向容器末尾位置的迭代器
cbegin 返回指向容器起始位置的常迭代器(const_iterator)
cend 返回指向容器末尾位置的常迭代器
=================Capacity================
size 返回有效元素個(gè)數(shù)
max_size 返回 unordered_map 支持的最大元素個(gè)數(shù)
empty 判斷是否為空
=================元素訪問=================
operator[] 訪問元素
at 訪問元素
=================元素修改=================
insert 插入元素
erase 刪除元素
swap 交換內(nèi)容
clear 清空內(nèi)容
emplace 構(gòu)造及插入一個(gè)元素
emplace_hint 按提示構(gòu)造及插入一個(gè)元素
================操作=========================
find 通過給定主鍵查找元素,沒找到:返回unordered_map::end
count 返回匹配給定主鍵的元素的個(gè)數(shù)
equal_range 返回值匹配給定搜索值的元素組成的范圍
================Buckets======================
bucket_count 返回槽(Bucket)數(shù)
max_bucket_count 返回最大槽數(shù)
bucket_size 返回槽大小
bucket 返回元素所在槽的序號
load_factor 返回載入因子,即一個(gè)元素槽(Bucket)的最大元素?cái)?shù)
max_load_factor 返回或設(shè)置最大載入因子
rehash 設(shè)置槽數(shù)
reserve 請求改變?nèi)萜魅萘?/p>