将 std::hash 专门用于无序容器中的用户定义类型
启用 std::unordered_set 中自定义键类型的使用和 std::unordered_map 一样,必须同时提供相等运算符和哈希函数。这通常涉及定义实现这些运算符的自定义结构或类。不过,对于用户定义的类型,使用默认的哈希函数会更方便,类似于编译器和库提供的内置类型。
根据 C 标准草案 N3242 和 Boost.Unordered ,可以将 std::hash 专门化为自定义类型。这涉及到向 std 命名空间添加专门化:
namespace std { template <> inline size_t hash<X>::operator()(const X& x) const { return hash<int>()(x.id); } }
在此示例中,类型 X 的哈希函数专门用于使用 int 类型的哈希函数,它假设 X 有一个成员变量 id。需要注意的是,哈希函数必须专门针对特定的模板参数类型,并且生成的哈希值必须与该类型的相等运算符一致。
合法性和可移植性:
namespace std { template <> struct hash<X> { size_t operator()(const X& x) const { return hash<int>()(x.id); } }; }
以上是如何在 C 中为我的用户定义类型专门化'std::hash”?的详细内容。更多信息请关注PHP中文网其他相关文章!