作者freelancer (三十億人的世界)
看板C_and_CPP
標題Re: [心得] cached hash value
時間Mon Mar 23 02:00:42 2009
我的想法是
1 如果要省的是算hash value 的時間,那要那每次算的時候都先查表
2 unordered_map 第三個 template parameter 可以給定自定的hash object
3 functor 的強項就可以保有內部資料
所以我的作法是
template<typename key_type>
class my_hash
{
public:
my_hash::my_hash(){};
size_t operator()(const key_type& key) const
{
map<int, size_t>::iterator iter;
if((iter = hashval.find(key)) != hashval.end())
return iter->second;
else {
hashval[key] = hashfun(key);
return hashval[key];
}
}
private:
mutable map<key_type, size_t> hashval;
hash<key_type> hashfun;
};
//main function
unordered_map<string, int, my_hash<string> > dict<10, my_hash<string>());
這樣是你想要的東東嗎?
ps: 關於buckets 的值,10 是 gnu c++ library 的預設值,VC++ 是 8
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.124.160.118
→ freelancer:不過比來比去真的有算hash快嘛?疑問 03/23 02:07
推 littleshan:你這樣光是在map中查值都可能比算hash還慢 03/23 08:19
→ freelancer:後來想想我也是這麼覺得,很蠢... 03/23 09:37