场景描述:
环境: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进行排序。