1. 程式人生 > 其它 >C++中unordered_map常用操作

C++中unordered_map常用操作

unordered_map介紹

unordered_map記錄元素的hash值,根據hash值判斷元素是否相同。map相當於java中的TreeMap,unordered_map相當於HashMap。無論從查詢、插入上來說,unordered_map的效率都優於hash_map,更優於map;而空間複雜度方面,hash_map最低,unordered_map次之,map最大。

unordered_map與map的對比

儲存時是根據key的hash值判斷元素是否相同,即unordered_map內部元素是無序的,而map中的元素是按照二叉搜尋樹儲存(用紅黑樹實現),進行中序遍歷會得到有序遍歷。所以使用時map的key需要定義operator<。而unordered_map需要定義hash_value函式並且過載operator==。但是很多系統內建的資料型別都自帶這些。

成員函式

1. 迭代器

begin   返回指向容器起始位置的迭代器(iterator)
end    返回指向容器末尾位置的迭代器
cbegin  返回指向容器起始位置的常迭代器(const_iterator)
cend    返回指向容器末尾位置的常迭代器
元素的鍵值分別是迭代器的first和second屬性。使用(*it).first或者it->first獲取。

2. 容量

size    返回有效元素個數
max_size 返回 unordered_map 支援的最大元素個數
empty 判斷是否為空

3. 元素插入與刪除

insert   插入元素
erase   刪除元素 ,可以通過迭代器或者key進行刪除
clear   清空內容
swap    交換內容

unordered_map<int,int> mymap;
//插入
mymap.insert({1,0});//陣列插入
mymap[1] = 0;//鍵值插入
mymap.insert(mymap2.begin(),mymap2.end());//插入另一個雜湊表中的元素
mymap.insert(pair<int,int>(0,1));
 
//刪除
mymap.erase(mymap.begin()); 
mymap.erase(1);
mymap.clear();

4. 查詢

find       通過給定主鍵查詢元素,沒找到:返回unordered_map::end
count      返回匹配給定主鍵的元素的個數
equal_range   返回值匹配給定搜尋值的元素組成的範圍

if (mymap.find(0) != mymap.end())
    cout << "found" << endl;
else
	cout << "not found" << endl;