2012-05-28 46 views
-1
For example if i have to store many entries like in C 
hash["1"]="11" 
hash["2"]="12" 
hash["11"]="21" 

條件是:您只查找連續相同的數字,所以只保留在地圖中。如何有效地在C中存儲字符串映射?

而像這些解決問題的條目很多。我們可以使用一些技術,例如添加ASCII值的總和來尋找索引,然後使用一些mod函數。

但是這種方法並不能保證不會有碰撞,即使有一次碰撞,整個問題也會出錯。

這可以用C++輕鬆完成嗎?

請給出一些建議/提示。 預先感謝

+3

我完全不理解你的問題。你能澄清嗎?另外:這是功課嗎?最後是C風格還是C++字符串? –

+0

如何高效地在C中存儲字符串散列? – Luv

+0

如果它是C問題,爲什麼它被標記爲'C++'?你知道C和C++是兩種截然不同的語言嗎? –

回答

2

關於散列函數:沒有散列函數可以保證不會發生衝突。他們只能儘量減少典型工作負載中碰撞的可能性。一個經常使用的散列函數是bernstein散列函數。你可以找到不同的字符串散列函數(包括伯恩斯坦)here

在C比較++,你可以簡單地使用不使用哈希映射標準map(見here)模板,但通常是用紅黑樹實現。 C++ 11標準有一個unordered_map(見here),它使用散列函數實現。