【发布时间】:2021-02-25 16:41:31
【问题描述】:
我知道 C++ 中的 STL std::hash 类仅以数字形式返回哈希,即使对于字符串也是如此。但是我想要一个哈希函数,它在 c++ 中传递一个整数时将哈希作为字母和字母的混合返回,并且冲突更少。有没有我可以使用的标准库函数?
我想要这样的东西: H(12345) = a44f81ji234kop 碰撞次数最少且分布良好。
【问题讨论】:
-
不,标准库中没有这样的哈希函数,
hashconcept 需要获取std::size_t值。 -
哈希产生比特;如何解释这些位由您决定。
-
你能解释一下什么是“字母和字符串的混合物”吗?字符串可以包含数字和字母。
-
这篇帖子几乎散发着XY problem 的气息,所以你为什么不告诉我们你真正想要做什么呢?为什么正是你需要这个?这听起来像您想要一个 base64 编码的加密摘要。毫无疑问,它会给你一个体面的分布,而不是你可以将它用于任何事情(当然不能用于 std::unordered_map 的键,反正它只会把它变成一个数字)。当你说, "... with less collisions" - 比 what 更少的碰撞?
std::hash<int>? -
您的输出格式看起来像原始字节的 base32、base36 或 base64 编码。没有什么特别的。您可以轻松地将数字结果转换为该格式。我同意@WhozCraig 这听起来像是一个 XY 问题。
标签: c++ string hash stl hash-function