针对用户定义类型专门化 std::hash
利用具有用户定义类型的无序容器键类型,例如 std::unordered_set
在研究各种资源(包括 C 标准)后,很明显可以将 std::hash
namespace std { template <> inline size_t hash<X>::operator()(const X& x) const { return hash<int>()(x.id); } }
现在,让我们解决提出的问题:
1.专业化的合法性
向 std 命名空间添加专业化不仅是允许的,而且是鼓励的。它允许扩展标准功能以支持用户定义的类型。
2. std::hash
专门化 std::hash
namespace std { template <> struct hash<X> { size_t operator()(const X& x) const { // Your custom hash function implementation } }; }
3.便携式解决方案
前面演示的 std::hash 专业化需要 C 11 兼容性,编译器可能无法普遍支持。为了提高可移植性,请考虑使用非标准命名空间,例如:
namespace ht { template <> struct hash<X> { // Your custom hash function implementation }; }
以上是如何为 C 中的自定义类型专门化 `std::hash::operator()` ?的详细内容。更多信息请关注PHP中文网其他相关文章!