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

| 我了解哈希表的数学基础。我在下面有一个哈希函数(在某个地方找到):
/* 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”? 一个人怎么用这个写一个
store()
功能 哈希表中的字符串? 如何适应数组 字符? 关于#3,是否适合替换
for
循环和
while
循环 以“ 5”字符结尾? 仅供参考,我正在学习第二份工作面试,这就是为什么我要问。     
已邀请:
         它返回
size_t
,因为那是本地整数(也是最快的)。为什么还要选择其他东西? \“桌子\”?哪张桌子如果您指的是哈希表,则可以使用返回值选择一个随机存储桶以将对象放入其中。(提示:认为\“ remainder \”。) 它是否已经适合数组? 如果它是一个以空值结尾的字符串,为什么不呢?     
         它不一定是ѭ1probably,但是它可能应该是无符号整数类型,因此mod是定义良好的。 通常的方法是使用哈希函数将“键”数据转换为数组索引。因此,您可以根据数组的大小进行修改,以获得0到SIZE-1之间的整数,您可以将其用作索引。您还需要一种“冲突解决策略”,因为除非哈希产生完美的结果,否则一些不同的密钥对将哈希为相同的值。 它似乎已经适应了。 如果字符串以NUL结尾,则可以搜索null。但是,所编写的函数将传递长度作为参数。最简单的方法是不使用工作函数,并使用strlen()的结果进行调用。 附言
const string &s
表示C ++,而不是C。这在编译时可能很重要。     
        
string
具有它自己的长度,您不需要传递它。这是C ++,而不是C-在C中没有引用。不需要
strlen
或类似的东西,或
NULL
终止符或其他任何形式。这意味着用一个寻找while12ѭ的while循环替换它会是Bad™,因为不能保证
std::string
甚至有一个,更不用说它是终止符了。     

要回复问题请先登录注册