获取适当的哈希索引C ++

时间:2009-10-01 06:14:18

标签: c++

我已经尝试了一切。甚至java的论坛:

java.lang.String.hashCode():

s[0]*(31^(n-1)) + s[1]*(31^(n-2)) + ... + s[n-1]

我将此解释为总和: 虽然我不太清楚如何处理s [n-1];

int hashmap::hashstr( const char*const str )
{
    int result = 0;
    int i = 0;
    int j = 0;
    int k = 0;
    unsigned n = 0;
    for ( ; str[n] != NULL; ++n ); // how many characters?

    while ( j != n ) // no more characters
    {
        result += str[i] * ( 31 ^ ( n - k ) );
        j++;
        i++;
        k++;
    }
    return result % maxSize;
}

其中maxSize是我的固定数组大小为11的第10个元素。

我做错了什么?我的一些哈希指标出错了。其他人,正确。为什么是这样?到目前为止,每个人都喜欢,“谁在乎它的运作方式!使用模板!”好吧,我想理解这个..

3 个答案:

答案 0 :(得分:7)

s[0](31^(n-1)) + s[1](31^(n-2)) + ... + s[n-1]

在公式^中表示取幂,而不是按位xor操作。
查看this SO问题。

答案 1 :(得分:3)

unsigned n = 0;
for ( ; str[n] != NULL; ++n ); // how many characters?

你知道你可以使用strlen(str),对吧?

这一行:

return result % maxSize;

这个result来自哪里?我没有看到任何result变量。

答案 2 :(得分:0)

从这段代码开始,您可以执行以下操作:

void function (const char *str)
{
    while (*str)
    {
        /* process whatever with *str which is the same as str[i] in a for loop */
        str++;
    }
}

此外,您不需要在const char *const个参数上使用第二个const。 const char *没问题。