Re: [心得] cached hash value
看板C_and_CPP (C/C++)作者freelancer (三十億人的世界)時間16年前 (2009/03/23 02:00)推噓1(1推 0噓 2→)留言3則, 2人參與討論串2/2 (看更多)
我的想法是
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
→
03/23 02:07, , 1F
03/23 02:07, 1F
推
03/23 08:19, , 2F
03/23 08:19, 2F
→
03/23 09:37, , 3F
03/23 09:37, 3F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章