在set容器排序的学习中,进行自定义排序时,发现一直会报错C3848
C3848 具有类型“const comparePerson”的表达式会丢失一些 const-volatile 限定符以调用“bool comparePerson::operator ()(const Person &,const Person &)”
经过调试,发现是伪函数的问题。
class comparePerson
{
public:
bool operator()(const Person &p1, const Person &p2)
{
//按照年龄进行排序 降序
return p1.m_Age > p2.m_Age;
}
};
将
bool operator()(const Person &p1, const Person &p2)
改为:
bool operator()(const Person &p1, const Person &p2)const
即可。
实例:
#include <set>
#include <string>
class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
class comparePerson
{
public:
bool operator()(const Person &p1, const Person &p2)const
{
//按照年龄进行排序 降序
return p1.m_Age > p2.m_Age;
}
};
void test01()
{
set<Person, comparePerson> s;
Person p1("刘备", 23);
Person p2("关羽", 27);
Person p3("张飞", 25);
Person p4("赵云", 21);
s.insert(p1);
s.insert(p2);
s.insert(p3);
s.insert(p4);
for (set<Person, comparePerson>::iterator it = s.begin(); it != s.end(); it++)
{
cout << "姓名: " << it->m_Name << " 年龄: " << it->m_Age << endl;
}
}
int main() {
test01();
system("pause");
return 0;
}