hash map和map的區別

2021-06-10 09:13:14 字數 1661 閱讀 3750

這裡列幾個常見問題,應該對你理解和使用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的區別

分類 stl2008 10 15 21 24 5444人閱讀 收藏舉報 class 資料結構 編譯器儲存 平台tree 這裡列幾個常見問題,應該對你理解和使用hash map比較有幫助。4.1 hash map和map的區別在 4.2 什麼時候需要用hash map,什麼時候需要用map?總 體來說...

C 中map和hash map的區別

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