专门为无序容器中的自定义类型使用 std::hash
在 std::unordered_set 和 std::unordered_map 等无序容器中,支持自定义键类型需要提供运算符==和散列函子。虽然使用自定义哈希函子很方便,但也希望为类似于内置类型的自定义类型提供默认哈希。
要实现这一点,可以专门化 std::hash
合法性
在 std 命名空间中指定专业化是允许的,事实上,在某些情况下是鼓励的喜欢this.
合规性
专门化 std::hash 的正确方法是在 std 命名空间中定义自定义结构。以下代码片段演示了正确的语法:
namespace std { template <> struct hash<Foo> { size_t operator()(const Foo &x) const { // Hashing logic for custom type } }; }
可移植性
这种专门化 std::hash 的方法可以在 g 和 MSVC 等主要编译器之间移植。
附加功能
分开从 std::hash 中,我们还可以专门化其他函子,例如 std::less、std::equal_to 和 std::swap 等自定义类型以增强功能。
结论
通过专门化 std::hash,可以为无序容器中的自定义类型提供默认的哈希函数,从而更方便地在标准库容器中使用它们。这种方法既合法又可移植,同时遵守 C 11 标准。
以上是如何为 C 无序容器中的自定义类型提供默认哈希函数?的详细内容。更多信息请关注PHP中文网其他相关文章!