C++ STL之unordered_map


hash_map未加入C++11標准

C++11標准加入unordered系列的容器unordered_map

 

map vs unordered_map: map底層實現為紅黑樹,時間復雜度為O(logn),unordered_map底層實現為哈希表,時間復雜度為O(1),均不能有重復的key,可使用[]運算符

 

  • 但是在數據量小的時候,unorder_map比map慢
原因在於unordered_map的初始化比較耗時,我們都知道map是紅黑樹,unordered_map是哈希表,造成性能差異的原因在於,紅黑樹初始化時,節點只需要一個,后續的插入只是插入新的節點,但是哈希表初始化時就不是那么簡單了,哈希表初始化時需要申請一個數組,數組的每個元素都指向一條鏈表,所以初始化時需要申請很多內存,相比於map,的確更耗時。



map vs multimap: 均為紅黑樹底層實現,multimap支持重復的key,不能使用[]運算符

默認初始化為零(int),或空(string)

 

map.count(); //返回被查找的key是否存在 ,為1或0

map.find(); //返回被查找key 的位置,若沒有則返回map.end()

 

 

 

map跟set使用舉例:

//單詞計數

map<string,int> wordcount; set<string> exclude; string word; while(cin>>word) { if(exclude.find(word)==exclude.end())//排除word   ++wordcount[word]; }

 


免責聲明!

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



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