c++ - 为什么哈希函数返回一个 size_t,它是如何使用的?

标签 c++ hashtable hash

我了解哈希表的数学基础。我在下面有一个哈希函数(我在某处找到的):

/* 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;
}
  1. 为什么返回 size_t
  2. 如何使用它来编写一个 store() 函数放置一个 哈希表中的字符串?
  3. 这如何适用于数组 字符?
  4. 关于#3,更换是否合适 for 循环和一个 while 循环 在 '\0' 字符处终止?

仅供引用,我正在准备第二次面试,这就是我问的原因。

最佳答案

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

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

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

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

关于c++ - 为什么哈希函数返回一个 size_t,它是如何使用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394228/

相关文章:

c - 尝试将项目添加到链接列表的问题

python - 代码迭代真的很慢,为什么?

hash - 一致性哈希作为扩展写入的一种方式

c++ - 调试 C++ 代码 : Catch first NaN appearance

c++ - 使用 boost::unordered_map 时如何计算键冲突?

C++ 读取 BMP 文件仅在行填充等于 3 字节时有效

c# - 为什么字典不像哈希表那样访问不存在的键?

security - 一次性盐和服务器密码比较

Java 集合比 C++ 容器更快?

c++ - 在哪里可以找到 __sync_add_and_fetch_8?