首页 > 后端开发 > C++ > 如何为 C 中的自定义类型专门化 `std::hash::operator()` ?

如何为 C 中的自定义类型专门化 `std::hash::operator()` ?

Susan Sarandon
发布: 2024-11-30 00:35:14
原创
408 人浏览过

How Can I Specialize `std::hash::operator()` for Custom Types in C  ?

针对用户定义类型专门化 std::hash::operator()

利用具有用户定义类型的无序容器键类型,例如 std::unordered_set和 std::unordered_map ,您通常需要定义operator==(Key, Key) 和一个哈希函子。然而,对于此类类型,最好使用默认的哈希函数,就像内置类型的情况一样。

在研究各种资源(包括 C 标准)后,很明显可以将 std::hash::operator() 专门用于用户定义类型。以下代码片段举例说明了这种专业化:

namespace std {
  template <>
  inline size_t hash<X>::operator()(const X& x) const {
    return hash<int>()(x.id);
  }
}
登录后复制

现在,让我们解决提出的问题:

1.专业化的合法性

向 std 命名空间添加专业化不仅是允许的,而且是鼓励的。它允许扩展标准功能以支持用户定义的类型。

2. std::hash::operator() 的兼容版本

专门化 std::hash::operator() 的正确语法如下:

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板