2015-09-21 25 views
0

以下命令爲2臺PC上的hashed_data生成不同的結果。在一個使用Visual Studio 2010和其他的Visual Studio 2013的Hash一般應具有相同輸入產生相同的結果C++ hash在VS 2010和VS 2013上使用相同的輸入返回不同的結果

hash<string> hash_func; 
unsigned long long hashed_data = (unsigned long long)hash_func("dogcat"); 

與VS電腦2010年業績6824943158688951155

用VS 2013的結果計算機14899951770080783754

其他輸入也產生兩臺PC之間的不同結果。

+3

你爲什麼認爲你應該得到相同的結果? – juanchopanza

+2

'std :: hash'用於散列容器,它爲不同運行中的相同輸入生成不同散列的能力是防止dos攻擊的一個功能。如果您希望運行,機器和實現之間的可重複性,請使用類似SHA的標準。 –

+2

該標準沒有說明應該如何計算哈希值,因此我們可以預計它會因不同的實現而有所不同。 –

回答

1

回答問題總是很難回答,但這裏的基本答案是存在多個標準庫實現。就其在標準中記錄的那樣,它們的行爲非常非常相似,但是沒有記錄確切的散列值。這爲實施優化留下了餘地。由於更聰明的散列函數可以導致更高效的散列表,所以可以預料到散列函數將與不同。

相關問題