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

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

Linda Hamilton
发布: 2024-12-05 15:33:14
原创
337 人浏览过

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

为无序容器中的用户定义类型专门化 std::hash::operator()

支持 std:: 中的用户定义键类型unordered_set;和 std::unordered_map ,您需要提供运算符 ==(Key, Key) 和哈希函子。

虽然只写 std::unordered_set 会更方便;使用类型 X 的默认哈希,就像内置类型一样,您可以专门化 std::hash::operator() 来实现此目的。

根据 C 标准草案 N3242 §20.8.12 [unord.hash] 和 §17.6.3.4 [hash.requirements],并在查阅各种资源后,专门以下方式的 std::hash::operator() 是正确且唯一的方法:

namespace std {
  template <> struct hash<Foo>
  {
    size_t operator()(const Foo &amp; x) const
    {
      /* your code here, e.g. "return hash<int>()(x.value);" */
    }
  };
}
登录后复制

这允许您向命名空间 std 添加专门化,并且是扩展功能的推荐方法用户定义类型的标准类型。

以上是如何为 C 无序容器中的自定义类型专门化 `std::hash::operator()`?的详细内容。更多信息请关注PHP中文网其他相关文章!

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