C++ 如何散列字符串?我需要将随机字符串以某种方式转换为整数,以便将它们放入哈希表中

C++ 如何散列字符串?我需要将随机字符串以某种方式转换为整数,以便将它们放入哈希表中,c++,hashtable,type-conversion,hash,C++,Hashtable,Type Conversion,Hash,例如,“foobar”应该散列到类似3456的值。我的哈希表数组的大小为811,因此我的哈希函数将执行3456%811以查找哈希表中放置“foobar”的位置 有什么建议吗?我建议 djb2 这一算法(k=33)是dan bernstein多年前在comp.lang.c.首次报告的。该算法的另一个版本(现在伯恩斯坦喜欢)使用xor:hash(i)=hash(i-1)*33^str[i];数字33的神奇之处(为什么它比许多其他常数,素数与否都好)从未得到充分解释 无符号长哈希(无符号字符*str)

例如,“foobar”应该散列到类似3456的值。我的哈希表数组的大小为811,因此我的哈希函数将执行3456%811以查找哈希表中放置“foobar”的位置

有什么建议吗?

我建议

djb2 这一算法(k=33)是dan bernstein多年前在comp.lang.c.首次报告的。该算法的另一个版本(现在伯恩斯坦喜欢)使用xor:
hash(i)=hash(i-1)*33^str[i]
;数字33的神奇之处(为什么它比许多其他常数,素数与否都好)从未得到充分解释

无符号长哈希(无符号字符*str)
{
无符号长散列=5381;
INTC;
而(c=*str++)

hash=((hash您可以使用buildit stdlib函数:

#include <stdlib.h>
i = atoi(char *);
#包括
i=atoi(字符*);
它返回该字符串的整数值。

Boost functional/Hash

#包括
int main()
{
boost::散列字符串\u散列;
std::size\u t h=字符串散列(“散列我”);
大小表索引=h%811;
}

@Saeed Amiri:他的哈希表数组的大小为811。这并没有将其实现限制为811个字符串…在@delnan中有更全面的回答:但这是一种可能的哈希方法…一种可能但非常糟糕的方法:-)我必须尝试一下…我想要简单,不管效率如何。这只是为了练习。谁否决了这个答案:为什么?这似乎是一个有效的答案,不管它有多“糟糕”。这很有趣。我想自己做一个实际的(简单的)散列函数。实际上我可能会这么做,但这只是一个练习。
#include <stdlib.h>
i = atoi(char *);
#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;
}