C ++ 11中的hash_value函数

时间:2013-11-19 23:59:37

标签: c++ boost c++11

Boost库提供了一个方便函数hash_value,它基本上只调用:

return hash<T>()(key);

据我所知,C ++ 11包括std::hash,它与boost::hash非常相似,但不包含std::hash_value。这需要应用程序代码创建hash对象并将其称为operator(),而不是仅调用方便的函数。是否有std::hash_value未标准化的原因?

1 个答案:

答案 0 :(得分:4)

std::hash<T>函数的主要用途是用于从std::unordered_*容器组中的键获取哈希值的对象。这些将始终包含和使用相应的对象,可能使用空基本优化来避免占用任何内存。在任何情况下,只要使用std::hash<T>类型,实际上就是一个对象。

虽然功能对象可以单独使用,但可能很少见。此外,对于其他类似的现有函数对象,没有相应的便利调用函数:虽然它们中的大多数都是运算符的包装器,但是因为不能使用std::less<void*>而特别是​​ptr1 < ptr2可能会很有趣。 (至少,如果ptr1ptr2不属于同一个数组对象,则无法在C ++ 03中使用它。也就是说,没有合适的优先权。

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