Boost 库提供了一个方便的函数
hash_value
,基本上只是调用:
return hash<T>()(key);
据我所知,C++11 包含了
std::hash
,它与 boost::hash
非常相似,但不包含 std::hash_value
。 这需要应用程序代码创建一个 hash
对象并调用它的 operator()
而不是仅仅调用一个方便的函数。 std::hash_value
没有标准化有什么原因吗?
std::hash<T>
函数的主要用途是用于从std::unordered_*
容器组中的键获取哈希值的对象。这些将始终包含并使用相应的对象,可能使用空基优化来避免占用任何内存。无论如何,每当使用 std::hash<T>
类型时,周围实际上就有一个对象。
虽然函数对象可以单独使用,但可能很少见。此外,对于其他类似的现有函数对象,没有相应的方便调用函数:尽管它们中的大多数都是运算符的包装器,特别是
std::less<void*>
独立调用可能会很有趣,因为您不能使用 ptr1 < ptr2
(至少,如果 ptr1
和 ptr2
不是同一数组对象的一部分,则不能在 C++03 中使用)。也就是说,没有合适的优先顺序。
最后,我猜想便利函数根本就不是提案的一部分:如果没有提案并且没有真正好的案例,那么 C++ 标准中就不会包含任何内容。从表面上看,n1456似乎至少是“哈希表”提案的一个修订版,并且它不包含任何
std::hash_value<T>()
的痕迹。