16.7.5【列表list容器的排序案例】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include<iostream>
#include<cstdlib>
using namespace std;
#include<list>
#include<string>
 
 
/*
    3.7.8 list容器的排序案例
        案例描述:将Person自定义数据类型进行排序,Person中属性有姓名、年龄、身高
        排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序
*/
 
 
class Person
{
public:
    string name;
    int age;
    int hight;
 
public:
    Person(string _name, int _age, int _hight)
    {
        this->name = _name;
        this->age = _age;
        this->hight = _hight;
    }
};
 
 
void print_info(const list<Person> & L)
{
    for(list<Person>::const_iterator cit=L.begin(); cit!=L.end(); cit++)
    {
        cout << "name:" << (*cit).name << " age:" << cit->age << " hight:" << (*cit).hight << endl; //.和->都可以使用
    }
}
 
 
 
bool compare_person(Person p1, Person p2)
{
    if(p1.age == p2.age)
    {
        //身高降序:令 前一人身高 > 后一人身高
        return p1.hight > p2.hight;
    }
    //年龄升序:令 前一人年龄 < 后一人年龄
    return p1.age < p2.age;
}
 
 
void test378()
{
    list<Person> L;
    Person p1("sam", 20, 180);
    Person p2("jack", 25, 178);
    Person p3("amy", 18, 166);
    Person p4("tom", 20, 175);
    Person p5("anne", 20, 200);
    L.push_back(p1);
    L.push_back(p2);
    L.push_back(p3);
    L.push_back(p4);
    L.push_back(p5);
 
    cout << "排序前:" << endl;
    print_info(L);
 
    L.sort(compare_person); //利用回调函数或仿函数自定义排序时的比较规则(此处为回调函数)
 
    cout << "排序后:" << endl;
    print_info(L);
 
}
 
 
int main()
{
    test378();
    //对于自定义数据类型,必须要指定排序规则,否则编译器不知道如何进行排序
    //高级排序只是在排序规则上再进行一次逻辑规则制定,并不复杂
 
    system("pause");
    return 0;
}

  

 

posted @   yub4by  阅读(65)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示