这种二进制数据的哈希函数实现可以吗?它旨在由满足 Hash 要求的具体对象使用,即从 Hash::operator 内部调用。
size_t hash_binary_buffer(const void* data, size_t count) {
std::string_view sv{(const char*)data, count};
return std::hash<std::string_view>(sv);
}
使用此函数的一种方法是将 memcpy 包含对象状态的二进制值放入二进制数组中,然后将该数组传递给上述函数。
任何对象都可以被视为字节数组。您不需要为此
memcpy
。请注意,严格别名有相应的例外,这使得这成为可能。当最终你散列一个 void*
数组时,也没有理由绕道 char
。
话虽这么说,对于给定的对象
obj
,你的函数的作用与:
std::hash<std::string_view>{}( { reinterpret_cast<const char*>(&obj) , sizeof(obj) } );
如果这就是您想要的,那么就“ok”。