案例描述
将Person自定义数据类型进行排序,Person中属性有姓名、年龄、身高。按照年龄进行升序,如果年龄相同按照身高进行降序排列。
案例代码
#include<iostream>
#include<list>
using namespace std;
//定义Person类
class Person{
public:
string name;
int age;
int height;
Person(string name,int age, int height){
this->name = name;
this->age = age;
this->height = height;
}
};
//排序规则
bool ComparePerson(Person &p1, Person &p2){
//判断年龄是否相等
if(p1.age == p2.age){
//按身高从大到小
return p1.height > p2.height;
}else{
//按年龄从小到大
return p1.age < p2.age;
}
}
void test(){
//定义一个Person数据类型的链表L
list<Person>L;
//构建数据
Person p1("刘备",35,170);
Person p2("关于",45,179);
Person p3("张飞",25,177);
Person p4("赵云",39,172);
Person p5("孙权",18,173);
Person p6("关于",25,171);
//将对象从尾部插入链表L
L.push_back(p1);
L.push_back(p2);
L.push_back(p3);
L.push_back(p4);
L.push_back(p5);
L.push_back(p6);
//打印输出
for(list<Person>::iterator it = L.begin(); it != L.end(); it++){
cout<<"姓名:"<<it->name<<"年龄:"<<it->age<<"身高:"<<it->height<<endl;
}
cout<<"-------------------------------------"<<endl;
//使用排序规则进行排序
L.sort(ComparePerson);
//打印输出
for(list<Person>::iterator it = L.begin(); it != L.end(); it++){
cout<<"姓名:"<<it->name<<"年龄:"<<it->age<<"身高:"<<it->height<<endl;
}
}
int main(){
test();
return 0;
}