C++ 11中的hash_value函数

Sil*_*ler 9 c++ boost c++11

Boost库提供了一个方便的功能hash_value,基本上只是调用:

return hash<T>()(key);
Run Code Online (Sandbox Code Playgroud)

据我所知,包含的C++ 11 std::hash非常相似boost::hash,但没有包含std::hash_value.这需要应用程序代码来创建一个hash对象并调用它,operator()而不是只调用一个方便的函数.有什么理由std::hash_value没有标准化吗?

Die*_*ühl 4

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

尽管函数对象可以单独使用,但这种情况可能很少见。此外,对于其他类似的现有函数对象,没有相应的方便调用函数:尽管它们中的大多数都是运算符的包装器,尤其是std::less<void*>独立调用可能会很有趣,因为您无法使用ptr1 < ptr2(至少,它不能如果ptr1ptr2不是同一数组对象的一部分,则在 C++03 中使用)。也就是说,没有合适的优先顺序。

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