unordered_set是一種關聯容器,set和map內部實現是基於RB-Tree,是有序的,unordered_set和unordered_map是基於hashtable。是無序的。
首先了解哈希表的機制。哈希表是根據關鍵碼值進行直接訪問的數據結構,通過相應的哈希函數處理關鍵字得到相應的關鍵碼值,關鍵碼值對應着一個特定位置,用該位置來存取相應的信息。這樣就能以較快的速度獲取關鍵字的信息。
unordered_set解決內部沖突采用的是--鏈地址法。當有沖突發生時,把具有同一關鍵碼的數據組成一個鏈表,下圖展示了鏈地址法的使用:

模板原型:
template<class Key,
class Hash=hash<Key>,
class Pred=equal_to<Key>,
class Alloc=allocator<Key>,
>class unordered_set;
unordered_set具有快速查找,刪除,添加的優點
基本使用:
一、定義
unordered_set<int> c1;
二、容量操作
c1.empty();//判斷是否為空 c1.size();//獲取元素個數 c1.max_size();//獲取最大存儲量
三、迭代器操作
//返回頭迭代器 unordered_set<int>::iterator ite_begin=c1.begin(); //返回尾迭代器 unordered_set<int>::iterator ite_end=c1.end(); //槽迭代器 unordered_set<int>::iterator local_iter_begin=c1.begin(1); unordered_set<int>::iterator local_iter_end=c1.end(1);
四、基本操作
1 //查找函數find通過給定主鍵查找元素 2 unordered_set<int>::iterator find_iter=c1.find(1); 3 //value出現的次數count返回匹配給定主鍵元素的個數 4 c1.count(1); 5 //返回元素在哪個區域equal_range,返回值匹配給定搜索值的元素組成的范圍 6 pair<unordered_set<int>::iterator, 7 unordered_set<int>::iterator> pair_equal_range = c1.equal_range(1); 8 //插入函數emplace 9 c1.emplace(1); 10 //插入函數emplace_hint()使用迭代器 11 c1.emplace_hint(ite.begin,1); 12 //插入函數insert 13 c1.insert(1); 14 //刪除erase 15 c1.erase(1); 16 //清空clear 17 c1.clear(); 18 //交換swap 19 c1.swap(c2);
五、籃子操作
1 //籃子操作,籃子個數bucket_count,返回槽數 2 c1.bucket_count(); 3 //籃子最大數量max_bucket_count,返回最大槽數 4 c1.max_bucket_count(); 5 //籃子個數bucket_size返回槽大小 6 c1.bucket_size(3); 7 //返回籃子bucket,返回元素所在槽的序號 8 c1.bucket(1); 9 //返回載入因子,即一個元素槽的最大元素數 10 c1.load_factor(); 11 //返回或設置最大載入因子 12 c1.max_load_factor();
六、內存操作
1 c1.rehash(1);//rehash設置槽數 2 c1.reserve(1000);//請求改變容器容量
七、hash func
1 auto hash_func_test=c1.hash_function();//返回與hash_func相同函數的指針
2 auto key_eq_test=c1.key_eq();//返回比較key值得函數指針