hash_value function in C++11

hash_value function in C++11

本文关键字:in C++11 function value hash      更新时间:2023-10-16

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(至少,如果ptr1ptr2不是同一数组对象的一部分,它就不能在C++03中使用)。也就是说,没有适当的优先顺序。

最后,我想方便函数根本不是提案的一部分:如果它没有被提出,而且没有一个真正好的案例,那么C++标准中就不会包含任何内容。从外观上看,n1456似乎至少是"哈希表"提案的一个修订版,而且它不包括std::hash_value<T>()的踪迹。