C++ hash_map 那位能给个自定义 哈希表,比较函数,和冲突函数的 代码看看?
template<classKey,classType,classTraits=hash_compare<Key,less<Key>>,classAllocator=al...
template <
class Key,
class Type,
class Traits=hash_compare<Key, less<Key> >,
class Allocator=allocator<pair <const Key, Type> >
>
class hash_map
这个是 VS2005 MSDN 里边的源码,那位大侠能帮忙写一个自定义的 hash_compare ,可以的话再来个allocator?? 展开
class Key,
class Type,
class Traits=hash_compare<Key, less<Key> >,
class Allocator=allocator<pair <const Key, Type> >
>
class hash_map
这个是 VS2005 MSDN 里边的源码,那位大侠能帮忙写一个自定义的 hash_compare ,可以的话再来个allocator?? 展开
1个回答
展开全部
我移植过一个java JDK中的hashmap,你要的话可以问我要,JDK中的实现非常好,哈希函数几乎是完全平均的,冲突采用的是桶策略,使用链表实现。给你贴一下哈希函数的代码:
int hashCode(string s) {
int h = 0, off = 0;
int len = s.length();
for (int i = 0; i < len; i++)
h = 31 * h + s[off++];
return h;
}
上面是String类的hashCode的计算,在HashMap中,基于这个结果又进行了进一步计算,算法如下:
int hash(int h) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
把两个函数写在一起就可以用了
原来你是用这个hash_map啊,那给你篇文章自己看看吧,应该不是很难,照猫画虎应该可以写出来。
http://hi.baidu.com/mxp446533129/blog/item/707b93953ae9396055fb9639.html
int hashCode(string s) {
int h = 0, off = 0;
int len = s.length();
for (int i = 0; i < len; i++)
h = 31 * h + s[off++];
return h;
}
上面是String类的hashCode的计算,在HashMap中,基于这个结果又进行了进一步计算,算法如下:
int hash(int h) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
把两个函数写在一起就可以用了
原来你是用这个hash_map啊,那给你篇文章自己看看吧,应该不是很难,照猫画虎应该可以写出来。
http://hi.baidu.com/mxp446533129/blog/item/707b93953ae9396055fb9639.html
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询