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