hash map和map的區別

2021-09-06 11:33:36 字數 1768 閱讀 7064

分類: 

stl2008-10-15 21:24 

5444人閱讀

收藏舉報

class

資料結構

編譯器儲存

平台tree

這裡列幾個常見問題,應該對你理解和使用hash_map比較有幫助。

4.1 hash_map和map的區別在**?

4.2 什麼時候需要用hash_map,什麼時候需要用map?

總 體來說,hash_map 查詢速度會比map快,而且查詢速度基本和資料量大小無關,屬於常數級別;而map的查詢速度是log(n)級別。並不一定常數就比log(n) 小,hash還有hash函式的耗時,明白了吧,如果你考慮效率,特別是在元素達到一定數量級時,考慮考慮hash_map。但若你對記憶體使用特別嚴格,希望程式盡可能少消耗記憶體,那麼一定要小心,hash_map可能會讓你陷入尷尬,特別是當你的hash_map物件特別多時,你就更無法控制了,而且hash_map的構造速度較慢。

現在知道如何選擇了嗎?權衡三個因素: 查詢速度, 資料量, 記憶體使用。

這裡還有個關於hash_map和map的小故事,看看:

4.3 如何在hash_map中加入自己定義的型別?

你只要做兩件事, 定義hash函式,定義等於比較函式。下面的**是乙個例子:

#include

#include

#include

using

namespace std;

//define the class

class classa

int getvalue()const 

void setvalue(int a)

private:

int c_a;

};//1 define the hash function

struct hash_a

};//2 define the equal function

struct equal_a

};int main()

i am 12

i am 198877

4.4如何用hash_map替換程式中已有的map容器?

這個很容易,但需要你有良好的程式設計風格。建議你盡量使用typedef來定義你的型別:

typedef mapkeymap;

當你希望使用hash_map來替換的時候,只需要修改:

typedef hash_mapkeymap;

其他的基本不變。當然,你需要注意是否有key型別的hash函式和比較函式。

4.5為什麼hash_map不是標準的?

具體為什麼不 是標準的,我也不清楚,有個解釋說在stl加入標準c++之時,hash_map系列當時還沒有完全實現,以後應該會成為標準。如果誰知道更合理的解釋,也希望告訴我。但我想表達的是,正是因為hash_map不是標準的,所以許多平台上安裝了g++編譯器,不一定有hash_map的實現。我就遇到了這樣的例子。因此在使用這些非標準庫的時候,一定要事先測試。另外,如果考慮到平台移植,還是少用為佳。

4.6 有學習使用hash_map的建議嗎?

hash中文是雜湊,也成為雜湊,聽見別人說雜湊容器不要埋怨自己孤陋寡聞。了解hash系列,你還可以看看這篇文章:effective stl 25: 熟悉非標準雜湊容器

, 另外建議檢視源**。如果還有問題,那麼你可以在stl論壇

上提問,會有高手回答你的。

hash map和map的區別

這裡列幾個常見問題,應該對你理解和使用hash map比較有幫助。4.1 hash map和map的區別在 4.2 什麼時候需要用hash map,什麼時候需要用map?總 體來說,hash map 查詢速度會比map快,而且查詢速度基本和資料量大小無關,屬於常數級別 而map的查詢速度是log n...

hash map和map的區別

這裡列幾個常見問題,應該對你理解和使用hash map比較有幫助。4.1 hash map和map的區別在 4.2 什麼時候需要用hash map,什麼時候需要用map?總 體來說,hash map 查詢速度會比map快,而且查詢速度基本和資料量大小無關,屬於常數級別 而map的查詢速度是log n...

C 中map和hash map的區別

這裡列幾個常見問題,應該對你理解和使用hash map比較有幫助。建構函式。hash map需要hash函式,等於函式 map只需要比較函式 小於函式 儲存結構。hash map採用hash表儲存,map一般採用紅黑樹 rb tree 實現。因此其記憶體資料結構是不一樣的。總體來說,hash map...