你如何散列字符串?我需要随机字符串以某种方式变成整数将它们放在我的哈希表中

时间:2011-11-12 19:48:15

标签: c++ hashtable type-conversion hash

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

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

我建议来自Hash Functions

djb2

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 *);

返回该字符串的整数值。