我在unordered_map
中使用一個對象作爲鍵,所以我需要定義一個哈希函數。我的問題是,其中應該實施散列函數。我應該把它放在類實現中,還是應該在需要的地方實現它?何處實現散列函數?
UPDATE: 如果它的確與衆不同,這一切是基於一個框架
我在unordered_map
中使用一個對象作爲鍵,所以我需要定義一個哈希函數。我的問題是,其中應該實施散列函數。我應該把它放在類實現中,還是應該在需要的地方實現它?何處實現散列函數?
UPDATE: 如果它的確與衆不同,這一切是基於一個框架
如果你預計你需要重複使用它在許多unordered_map
S,把它放在顯眼的地方,就像在課堂上。
如果你只是需要它一次性unordered_map
,把它放在你使用它的地方。你甚至可以use a lambda。
這是一種情況,我會*不*使用'lambda'。你可以確定,如果有人正在修改相等的定義,他們就不會發現追蹤用於實例化'unordered_map'的lambdas。鑑於相等函數和散列函數之間的依賴關係,它們應該彼此靠近定義。 –
@JamesKanze Err ...「接近」彼此的連續兩行代碼(如我的鏈接所示)? –
如果您也使用特殊的相等函數,那是一個很好的解決方案。我想在很多情況下,相等函數將是對象類型的'oparator =='。 –
我把它與類的定義,至少如果您使用==
作爲 unordered_map
中的相等函數。 散列函數的實現取決於等同比較的實現, ,並且在保持這兩者合在一起時有一定的優勢,以便在某人不改變散列函數的情況下減少 改變==
的可能性。
如果你也定義地圖特殊平等的功能,然後 兩個函數應該被定義在一起,大概接近的地方 它們將被用於實例化地圖。
在我看來,如果散列函數是基本的如下,它應該是類的方法,也應該內聯。
int hashFunction(long x){
return (int) (x % N);
}
如果它是一個稍微複雜一些的散列函數應該是這樣class.Because您將需要一個「N」,這將是spesific到類的方法。
根據標準,散列函數的返回類型應該是'size_t',而不是'int'。而且我不知道你通常需要一個取決於班級的「N」。 –
你能告訴我們你到目前爲止實施了什麼嗎? –
爲什麼你需要知道我在問什麼? – NebulaFox