c++ - C++11 中的 hash_value 函数

标签 c++ boost c++11

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

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

关于c++ - C++11 中的 hash_value 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20084778/

相关文章:

c++ - 模板和内存分配

c++ - 线程对象可以在C++ 11中 move 吗?

c++ - 为什么**不**将函数声明为 `constexpr` ?

c++ - 为什么我们需要语法产生式基本说明符的最后两个定义?

c++ - boost::make_shared 失败但 std::make_shared 工作

c++ - 如何使用 boost::bind 创建函数包装器

c++ - 与 Boost Xpressive 进行不区分大小写的匹配

c++ - boost 共享指针和内存管理

c++ - 为什么不能在 C++11 或更高版本的函数声明中定义结构?

c++ - ATL COM - EnumWindows 回调函数不适用于 IDispatch::Invoke