unordered_set的用法


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值得函數指針 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM