【发布时间】:2016-02-21 06:53:22
【问题描述】:
GNU C++ 标准库有:
struct _Hash_impl
{
static size_t
hash(const void* __ptr, size_t __clength,
size_t __seed = static_cast<size_t>(0xc70f6907UL))
{ return _Hash_bytes(__ptr, __clength, __seed); }
/* etc. */
}
作为其实现的一部分(例如,它用于字符串)。现在,我也想使用该代码...如何以可移植的方式访问它(例如,以一种可以与 clang 的 libc++ 一起使用的方式)?
【问题讨论】:
-
您在寻找
std::hash<std::string>吗? en.cppreference.com/w/cpp/utility/hash -
@GManNickG:我必须为此构建一个字符串,不是吗? IIRC,您不能只将一堆字节包装在
std::string中。 -
啊,我明白你现在在说什么了。
std::hash是您唯一可以访问标准哈希接口的方法,遗憾的是,它的指定不足。它没有用于组合散列的任何东西(例如,散列元组或数组)。如果你想要一些可移植的东西,包括范围的散列,Boost 有一个很好的散列库。 -
或者,显然,只需复制该代码并将其称为您自己的哈希并管理您自己的库。 :)
-
@GManNickG:你对我下面的想法有什么看法?
标签: c++ hash portability c++-standard-library string-hashing