Boost 库提供了一个方便的函数hash_value
,它基本上只是调用了:
return hash<T>()(key);
据我所知,C++11 包含与 boost::hash
非常相似的 std::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>()
的踪迹。
关于c++ - C++11 中的 hash_value 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20084778/