关于stl的 hash_map 谢大家

zdcju 2012-11-30 04:17:39
主要是两个问题
对于自己定义的数据类型 需要计算哈希值
size_t operator()(const ClassA & A)const{
// return hash<int>(A.getvalue());
return xxxx;
}
该怎么计算才比较合理呢 通过指针值来运算吗?有没有什么通用的计算方法

还有就是
bucket_size = 4, //
min_buckets = 8 //
这两个参数的含义
谢谢大家
...全文
107 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoreWindows 2012-11-30
  • 打赏
  • 举报
回复
数值类型可以使用下面这个: int inline hash_table::HashFun(int n) { return (n ^ 0xdeadbeef) % m_nTableSize; } 见《STL系列之九 探索hash_set》http://blog.csdn.net/morewindows/article/details/7330323 字符串的哈希函数就非常多了,网上一找一大堆。
I_ask_who 2012-11-30
  • 打赏
  • 举报
回复
以前看effective java,看到java的,现在网上一搜,希望有用...

/**   
* 加法hash   
* @param key 字符串   
* @param prime 一个质数   
* @return hash结果   
*/   
public static int additiveHash(String key, int prime)    
{    
   int hash, i;    
   for (hash = key.length(), i = 0; i < key.length(); i++)    
    hash += key.charAt(i);    
   return (hash % prime);    
}    
   
/**   
* 旋转hash   
* @param key 输入字符串   
* @param prime 质数   
* @return hash值   
*/   
public static int rotatingHash(String key, int prime)    
{    
   int hash, i;    
   for (hash=key.length(), i=0; i<key.length(); ++i)    
     hash = (hash<<4)^(hash>>28)^key.charAt(i);    
   return (hash % prime);    
//   return (hash ^ (hash>>10) ^ (hash>>20));    
}    
   
// 替代:    
// 使用:hash = (hash ^ (hash>>10) ^ (hash>>20)) & mask;    
// 替代:hash %= prime;    
   
   
/**   
* MASK值,随便找一个值,最好是质数   
*/   
static int M_MASK = 0x8765fed1;    
/**   
* 一次一个hash   
* @param key 输入字符串   
* @return 输出hash值   
*/   
public static int oneByOneHash(String key)    
{    
   int   hash, i;    
   for (hash=0, i=0; i<key.length(); ++i)    
   {    
     hash += key.charAt(i);    
     hash += (hash << 10);    
     hash ^= (hash >> 6);    
   }    
   hash += (hash << 3);    
   hash ^= (hash >> 11);    
   hash += (hash << 15);    
//   return (hash & M_MASK);    
   return hash;    
}    


本文来自CSDN博客,转载请标明出处:http://www.java3z.com/cwbwebhome/article/article5/51002.html
zdcju 2012-11-30
  • 打赏
  • 举报
回复
引用 1 楼 playStudy 的回复:
存的东西不同哈希值也不一样吧,
我看网上的作法是 定义一个变量m_hashValue 自己决定哈希值是多少 有没有什么通用的作法 用指针值 或者一个随机量做哈希值可以吗
playStudy 2012-11-30
  • 打赏
  • 举报
回复
存的东西不同哈希值也不一样吧,

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧