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]; }