为什么哈希函数返回size_t,它是如何使用的?

Ada*_*m S 5 c++ hash hashtable

我理解哈希表的数学基础.我有一个哈希函数(我发现在某处)下面:

/* Fowler / Noll / Vo (FNV) Hash */
static const size_t InitialFNV = 2166136261U;
static const size_t FNVMultiple = 16777619;
size_t myhash(const string &s, int length)
{
    size_t hash = InitialFNV;
    for(size_t i = 0; i < length; i++)
    {
        //XOR the lower 8 bits
        hash = hash ^ (s[i]);

        //Multiply by the multiple
        hash = hash * FNVMultiple;
    }
    return hash;
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么这会返回size_t
  2. 如何使用它来编写一个 store()将字符串放在哈希表中的函数?
  3. 如何适应一系列角色?
  4. 关于#3,for用一个while终止于'\0'字符的循环替换循环是否合适?

仅供参考,我正在研究第二次面试,这就是我要问的原因.

Meh*_*dad 2

  1. 它返回,size_t因为这是本机整数(也是最快的)。为什么选择其他东西?

  2. “桌子”?哪张桌子?如果您指的是哈希表,那么您可以使用返回值来选择一个随机存储桶来放入对象。(提示:想想“余数”。)

  3. 不是已经适应数组了吗?

  4. 如果它是一个以空结尾的字符串,为什么不呢?

  • @Adam @Richard 使用 `size_t`。它是无符号的(模算术很重要!),并且它是一个合理但大的整数类型(它测量事物、索引数组等的大小)。它是适合此应用的类型。 (4认同)