问题描述
我有一个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是您的限制,没有其他选择。