首页 > 后端开发 > C++ > 为什么在使用用户定义类型作为'std::map”中的键时会出现隐秘错误,以及如何修复这些错误?

为什么在使用用户定义类型作为'std::map”中的键时会出现隐秘错误,以及如何修复这些错误?

Linda Hamilton
发布: 2024-12-22 07:53:10
原创
112 人浏览过

Why Do I Get Cryptic Errors When Using User-Defined Types as Keys in `std::map`, and How Can I Fix Them?

如何使用以用户定义类型为键的 std::Map:了解隐性错误和替代方法

简介

当尝试使用以用户定义的类作为键的 STL 映射时,程序员可能会遇到神秘的问题错误消息,阻碍他们的进步。本文深入探讨了此错误背后的原因,并探讨了有效使用 std::maps 的替代方法。

神秘错误和原因

如提供的示例所示,使用用户定义类型作为映射键会引发错误,因为编译器无法为特定类型找到合适的比较运算符。在这种情况下,std::map 依赖于运算符

替代方法

1.比较器函数对象:

避免该错误的一种方法是定义一个比较器函数对象,该对象实现运算符

例如,以下代码片段使用比较器函数对象来比较和排序 Class1 实例:

struct Class1Compare
{
   bool operator() (const Class1& lhs, const Class1& rhs) const
   {
       return lhs.id < rhs.id;
   }
};

std::map<Class1, int, Class1Compare> c2int;
登录后复制

2。 std::less 的特化:

另一种方法涉及专门化 std::less 模板来专门为用户定义类型提供比较语义。这确保了与 std::map 的默认比较行为的无缝集成,而无需暴露显式的运算符

namespace std
{
    template<> struct less<Class1>
    {
       bool operator() (const Class1&amp; lhs, const Class1&amp; rhs) const
       {
           return lhs.id < rhs.id;
       }
    };
}
登录后复制

通过采用这些替代方案中的任何一个,程序员可以有效地将 std::map 与用户定义的类型键一起使用,从而消除对显式运算符

以上是为什么在使用用户定义类型作为'std::map”中的键时会出现隐秘错误,以及如何修复这些错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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