我目前使用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等。