c++ - 短文件名的最佳字符串哈希函数

标签 c++ string hash

对于像字符串这样的文件名,最好的字符串哈希函数是什么? 字符串类似于:

pics/test.pic
maps/test.map
materials/metal.mtl

最佳答案

如果要散列的数据的性质不需要任何花哨的散列算法,例如文本字符串的性质,您可能想尝试 FNV hashing function . FNV 哈希是 Fowler/Noll/Vo 的缩写,以纪念创建者,是一种非常快速的算法,已在许多应用程序中使用并取得了很好的结果,并且由于其简单性,FNV 哈希应该是最早尝试的哈希之一一个应用程序。

unsigned int fnv_hash (void* key, int len)
{
    unsigned char* p = key;
    unsigned int h = 2166136261;
    int i;

    for (i = 0; i < len; i++)
        h = (h*16777619) ^ p[i];

    return h;
}

或使用 MD5 algorithm 滚动相反,它是通用的,因此可以很好地满足您的需求。

关于c++ - 短文件名的最佳字符串哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11413860/

相关文章:

c++ - 为什么 vtables 有 sizeof(void*) * 2 字节的 0x00 填充?

c - 为什么在 strcat() 之后字符串会发生变化?

hash - 从 KRL 的哈希中检测空 pick()

string - GO标志pkg读取包含诸如“\u00FC”之类的转义 rune 的选项字符串将不会读取

java - 在 Java 中返回字符串作为参数的最佳方法

ruby-on-rails - 如何在 Ruby 中手动创建 JSON 结构?

ruby-on-rails - 如何在不替换第一个哈希的情况下合并哈希的哈希

c++ - 在嵌入式 x86 程序集中添加数组?

C++ sin() 返回不正确的结果

c++ - 设置boost文件系统