C++ C2678  二进制“小于” 没有找到接受“const XXX”类型的左操作数的运算符(或没有可接受的转换)

场景描述:

环境:VS2015

自定义Persion类,然后使用map存储,编译报错,

C2678    二进制“<”: 没有找到接受“const Persion”类型的左操作数的运算符(或没有可接受的转换)

代码如下:

#include<iostream>
#include<map>
using namespace std;

class Persion
{
public:
    Persion(string name,string address):m_name(name),m_address(address) {};
private:
    string m_name;
    string m_address;
};

int main()
{
    Persion li("li", "中国");
    Persion marry("marry", "美国");
    map<Persion, string> info;
    info.insert(pair<Persion,string>(li,"one"));
    info.insert(pair<Persion, string>(marry, "two"));

    return 0;
}

 

原因:

map<class a,class b>存储数据时,会根据类a中的operator<() 排序,如果该类没有定义这个函数,就会报错。

解决办法:Persion类添加函数

bool operator< (const Persion &other) const
{
     return m_name <other.m_name;
 }

技巧:通常把基本类型int,double,string,vector等放在左边,方便map进行排序。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值