在 cpp 自己的版本中对字符串进行哈希处理
Hashing string in cpp own version
我必须在 c++ 中实现一个字符串哈希函数 在 int 的情况下,它并不难,但是在没有外部库的字符串的情况下如何做到这一点?
我建议为字符串使用一个简单的哈希函数,方法是考虑每个字符的 ASCII 值。因此,请按照以下步骤获取哈希值。
- 计算与字符串字符对应的所有 ASCII 值的总和。
- hash_value = 总和%N
其中 N = 哈希表的大小
有很多哈希算法。如果你想要一个简单,不太高质量的,使用djb2(从这里(:
unsigned long
hash(unsigned char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
如果你想要一个更好的算法,请查看smhasher的很多算法。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 使用Qt C++计算类似Git的SHA1哈希
- 对 pair<pair<int,int>pair<int,int unordered_map进行哈希处理>>
- 使用对象的基类部分模板专用化对对象进行哈希处理::哈希
- 在 cpp 自己的版本中对字符串进行哈希处理
- 对 32 位整数进行哈希处理比对 3 个 16 位整数的哈希进行按位运算慢?
- 用于对编译时字符串进行哈希处理的延迟指针
- 如何对标准::正则表达式进行哈希处理
- 如何使用openssl/sha.h对文本文件进行SHA256哈希处理
- 一个提升或 stl api,用于以 string=>array-index 的形式对字符串数组进行哈希处理
- 是否可以覆盖std::string的==逻辑进行哈希处理
- gcc 预处理的表单哈希符号 + 数字"# 1"输出行是什么意思?
- 对表进行哈希处理
- 如何使用 std::hash 对缓冲区进行哈希处理
- 如何对文本文件中的信息进行哈希处理
- 正在对unordered_set的自定义指针类型进行哈希处理
- 哈希表中的冲突处理
- 在c++中使用unordered_map实现哈希表并处理冲突
- 对不太长的字符串向量 (urls) 进行哈希处理的最佳方法是什么?