自定义比较方法1 仿函数(set,map)
自己写的类,必须自定义比较方法才能使用,为 set 自定义比较方法,及第二个参数,只能使用仿函数,不能使用函数。
std::set
需要一个类型来作为它的比较器,而函数不是类型。即使你有一个函数,你也需要将其包装在一个仿函数中才能作为模板参数使用。不过,C++ 提供了一种方式来简化这一过程——通过使用标准库中的 std::function
或者自定义仿函数封装函数指针。
但是,通常更简单和推荐的方法是直接定义一个仿函数结构体或类,并将其作为模板参数。
函数对象
(
仿函数
)
是一个
类
,不是一个函数
#include <iostream>
#include <set>
#include <string>
using namespace std;
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) {
//按照年龄进行排序 降序
return p1.m_Age > p2.m_Age;
}
};
//bool comparePerson(const Person& p1, const Person &p2) {
// 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();
return 0;
}