如何使用标准工具通过给定的大小和内容检查来计算const char *的哈希值

问题描述

我有一个sub_string结构,我想使用标准工具来计算它的哈希值:

struct sub_string
{
    const char* ptr;
    size_t size;
};

以下是一些限制:

  • 必须由c++11提供的标准工具来完成。
  • const char*不必为NUL终止。
  • 我不想使用std::hash<const char*>专门化,因为它无需进行内容检查即可基于指针计算散列。
  • 我不想创建新的std::string{ptr,size}只是为了计算哈希值。
  • 我希望有一个sub_string哈希值与std::string{ptr,size}哈希值相同。
  • 我不想触及std::string的实现细节。

如何做到?

解决方法

不放松一项限制就无法做自己想做的事。

std::string的精确哈希算法由实现定义。因此,模仿它的唯一方法是通过制作std::string或手动借用您自己的类型来依靠std::string的哈希算法。由于您将不必依赖std::string的实现细节(这可能会让您假冒std::string而不真正构造一个std::string,或者手动编写它使用的哈希算法的副本),并且不想构造一个std::string_view,您就无法使用C ++ 11完成所需的工作。您需要C ++ 17支持才能创建std::string(确实保证与/snap/bin/microk8s permanently dropping privs did not work: File exists 的哈希对应),并且您已经说过C ++ 11是您的限制,没有其他选择。