例如,“foobar”应该散列为类似3456的内容。我的散列表数组的大小为811,因此我的散列函数将执行3456%811以找到散列表中的位置以放置“foobar”。
有什么建议吗?
答案 0 :(得分:3)
我建议来自Hash Functions
的 djb2这个算法(k = 33)是多年前dan bernstein在comp.lang.c中首次报道的。该算法的另一个版本(现在bernstein青睐)使用xor:
hash(i) = hash(i - 1) * 33 ^ str[i]
; 33号的神奇之处(为什么它比许多其他常数(优质或非常)效果更好)从未得到充分的解释。
unsigned long hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
是引用的原始K&amp; R书中的 lose lose
实施。 如何不来散列字符串的好例子。
答案 1 :(得分:0)
提升功能/哈希
http://www.boost.org/doc/libs/1_47_0/doc/html/hash/tutorial.html
#include <boost/functional/hash.hpp>
int main()
{
boost::hash<std::string> string_hash;
std::size_t h = string_hash("Hash me");
size_t table_index = h % 811;
}
答案 2 :(得分:-1)
你可以使用build it stdlib函数:
#include <stdlib.h>
i = atoi(char *);
返回该字符串的整数值。