今天在写set容器的时候,发现代码对自定义类型排序的时候出错了!
上代码:
class Person {
public:
Person(int age,int id):age(age),id(id){}
public:
int age;
int id;
};
//仿函数
class mycompare2 {
public:
bool operator()( Person& p1, Person& p2){
return p1.age > p2.age;
}
};
void test04() {
set<Person, mycompare2> sp;
Person p1(10, 20), p2(30, 40), p3(50, 60);
sp.insert(p1);
sp.insert(p2);
sp.insert(p3);
for (set<Person, mycompare2>::iterator it4 = sp.begin(); it4 != sp.end(); it4++) {
cout << (*it4).age << " " << (*it4).id << endl;
}
}
int main() {
//test01();
//test02();
//test03();
test04();
return 0;
}
主要是:
C3848 具有类型“const Mycompare”的表达式会丢失一些 const-volatile 限定符以调用“bool Mycompare::operator ()(const Person &,const Person &)”
C2664 “bool Mycompare::operator ()(const Person &,const Person &)const”:无法将参数 1 从 “const_Kty" 转换成 ”const person &“
https://blog.csdn.net/dsoskns/article/details/117135299
以上代码在vs有些版本中是可以跑得通的! 但在vs2019版本中,是会提示错误的! 具体出现了两个错误两种错误
解决方案
bool operator()(const Person& p1, const Person& p2)const
const bool operator()(const Person& p1, const Person& p2)const
有情况反应是:
有个问题,就是这样是对的,但是当我交换了键值int和Person的位置后,就还是报错,不知道为啥
不知道什么原因,有解决方案的再更新