使用Map报错:错误 C2678 二进制“<”: 没有找到接受“const _Ty”类型的左操作数的运算符(或没有可接受的转换)

在 C++中 使用Map时出现了这个问题:

严重性	代码	说明	项目	文件	行	禁止显示状态
错误	C2678	二进制“<: 没有找到接受“const _Ty”类型的左操作数的运算符(或没有可接受的转换)	QtWidgetsApplication1	C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\include\xstddef	127	

你说说咱这头一次使用,怎么就出这么个问题呢?


struct mykey
{
    int iRegion_Id;
    int iGrade;

    mykey(int _iRegion_Id, int _iGrade)
    {
        int = _iRegion_Id;
        iGrade = _iGrade;
    }
    ~mykey()
    {
    }
};

map<mykey,myvalue> hhh;

于是我在后面通过key来设置value时,怎么也设置不对

找不到原因就去问百度:

只有重载<的类或者结构才能作为map的key值。string可以作为key值是因为string重载了<。如果不重载<会提示如下错误:
error C2676: 二进制“<”: “const C”不定义该运算符或到预定义运算符可接收的类型的转换

也就是说,你想要用自定义的数据结构来作为key的值,那么,你就要重载 < 运算符。

于是我改了我的程序:

struct mykey
{
    int iRegion_Id;
    int iGrade;

    mykey(int _iRegion_Id, int _iGrade)
    {
        iRegion_Id = _iRegion_Id;
        iGrade = _iGrade;
    }

    bool operator < (const mykey& pk) const
    {
        if (this->iRegion_Id < pk.iRegion_Id)
            return true; 
        else if (this->iRegion_Id == pk.iRegion_Id && this->iGrade < pk.iGrade)
            return true;
        return false;
    }

    ~mykey()
    {

    }
};

map<mykey,myvalue> hhh;

实际上我写的这个重载的意思:

    bool operator < (const mykey& pk) const
    {
        if (this->iRegion_Id < pk.iRegion_Id)
            return true; 
        else if (this->iRegion_Id == pk.iRegion_Id && this->iGrade < pk.iGrade)
            return true;
        return false;
    }

还有一种用法:

        if (this->iRegion_Id < pk.iRegion_Id || this->iGrade < pk.iGrade)
            return true; 
        return false;

同样可以实现,但是,第一种方法有优先级.
就是,保证,这两个参数同时决定了key的值,如果有多个 || 多个就可以了!

个人是这么认为的,如果有问题,还请cue me!

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值