1

所以我一直在阅读很多关于使用std::hash及其标准实现的文章、文档页面、帖子、基准测试等。

概要

这里,它似乎std::hash总是会返回一个std::size_t,从这里开始,它的大小至少为16 位或 2 个字节,尽管它取决于实现。

但这让我很担心。std::hash如果我什至不能保证哈希至少为 32 位(我真的希望它返回 64 位),那么我该如何在字符串上使用。

在我的特定 x64 机器std::size_t上定义为long unsigned int,但显然在我部署我的程序时不能保证。

问题

有没有办法解决这个问题,所以我可以肯定地知道我得到了一个 64 位的哈希返回std::hash

结论

从评论来看,std::hash不适合。谢谢!

4

1 回答 1

1

size_t被定义为能够容纳最大对象的大小。这意味着如果您在一个size_t2 个字节的系统上工作,那么您的字符串将非常短。通常size_t与指针大小相同,在 32 位系统上为 4 个字节,在 64 位系统上为 8 个字节。这可能就足够了。

话虽如此,如果您认为这还不够,您可以创建自己的Hash类,STL 中的所有内容都允许您传递该自定义类而不是专门化std::hash.

于 2021-03-09T19:21:03.620 回答