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;