2013-08-28 28 views
0

我目前使用MS VC++ 2008及其提供的帶有擴展的標準庫。 我想使用散列容器來快速插入/刪除/查找對象。所以,我想這應該工作剛剛好:使用stdext :: hash_set/hash_map與對象指針進行衝突

stdext::hash_set<MyOjbectClass*> 

我發現那是什麼衝突是非常高的默認散列函數(我假設只是使用指針值)。

當我在調試器中運行下面的代碼:

stdext::hash_set<void*> hs; 
for (int i=0; i<30; i++) 
{ 
    hs.insert(new std::string()); 
} 

我看到所有項目都放在同一個桶! (facepalm) 雖然所有的指針都是唯一的。所以我可以忘記O(1)。

那麼,使其有效工作的正確方法是什麼?

提供自定義哈希函數?這樣的指針是好的嗎?

注意:我需要使用hash_map/hash_set。請不要提供使用unordered_map/set或boost等。

回答