0
我想實現一個哈希映射我自己,我想用一個數組來做到這一點。但是我現在處理的問題是如何將密鑰散列到散列值。我是否需要使用不同的方法來進行哈希處理,如'int','char','string','* pointer'等不同的類型,還是有一種方法可以一起完成這些工作?我試圖使用reinterpret_cast(表達式),但它不適用於'char'。STL如何工作以散列unordered_map <>的密鑰?
在此先感謝。
我想實現一個哈希映射我自己,我想用一個數組來做到這一點。但是我現在處理的問題是如何將密鑰散列到散列值。我是否需要使用不同的方法來進行哈希處理,如'int','char','string','* pointer'等不同的類型,還是有一種方法可以一起完成這些工作?我試圖使用reinterpret_cast(表達式),但它不適用於'char'。STL如何工作以散列unordered_map <>的密鑰?
在此先感謝。
STL使用已經爲大多數基本類型定義的模板類。事實上,在實時情況下,如果您不在這些範圍內,則必須針對您自己的數據類型實施它。
模板類是hash<T>
,看看here。
請注意,模板不能作爲Java泛型使用,你用特定類型的模板專門化來「填補空白」,在這種情況下你沒有一個適用於所有類型的實現(除非你定義一個公共基類,用於將要存儲在地圖中的對象,或者如註釋中所建議的那樣,使用較低級別並採用類變量的原始字節)。
一般的方法是採用對象的原始字節表示並將其散列,就好像它是一個'unsigned char'數組。標準庫(和*** NOT ***「STL」,這是一個古老的庫!)實際上使用'std :: hash <>'函數對象模板的特化。它專用於原始類型以及經常使用的鍵類型(例如'std :: string')。 – 2014-10-27 23:56:36
你可以實現一個採用'void const *'和'size_t'的散列函數。這將適用於所有沒有填充的POD類型。 – 2014-10-28 00:00:46