cpp: Sorting a List of Objects with Custom Comparator or Lambda Function using C++11

PigInfo.h

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#ifndef PIGINFO_H
#define PIGINFO_H
 
#include <iostream>
#include<string.h>
#include<math.h>
 
using namespace std;
 
/*
实体类
https://learn.microsoft.com/zh-cn/cpp/standard-library/cpp-standard-library-header-files?view=msvc-170
https://learn.microsoft.com/en-us/cpp/cpp/header-files-cpp?view=msvc-170
https://btechgeeks.com/cpp-how-to-sort-a-list-of-objects-with-custom-comparator-or-lambda-function/ 排序
*/
 
/**
 * @brief 猪的类的简单概述 \n(换行)
 * 类的详细概述
 * geovindu, Geovin Du
 */
class PigInfo
{
private:
    /**
    * @brief 成员变量猪的名称
    *
    * 成员变量PigName的详细说明,这里可以对变量进行
    * 详细的说明和描述,具体方法和函数的标注是一样的
    */ 
    std::string PigName;
     
    /**
    * @brief 成员变量猪的重量
    *
    * 成员变量PigName的详细说明,这里可以对变量进行
    * 详细的说明和描述,具体方法和函数的标注是一样的
    */
    int PigWeight;
 
public:
    /**
    * @param [string] pigName 只能输入以下参数:
    * -# a:代表geovindu        // 生成 1. a:代表geovindu
    * -# b:代表Geovin Du        // 生成 2. b:代表Geovin Du
    * -# c:代表hong        // 生成 3. c:代表hong
    */
    void SetPigName(string pigName)
    {
        PigName = pigName;
    }
    /**
    * @param [int] pigWeight 只能输入以下参数:
    * -# 1:代表公斤        // 生成 1. 1:代表公斤
    * -# 2:代表吨        // 生成 2. 1:代表吨
    * -# 3:代表克        // 生成 3. 1:代表克
    */
    void SetPigWeight(int pigWeight)
    {
        PigWeight = pigWeight;
    }
    /**
    * @brief 得到猪的名称
    * @param [string] 参数名称   
    *
    * @retval 0     成功
    * @retval -1    失败
    * @pre file 必须使用的返回值
    */
    string getPigName()
    {
        return PigName;
    }
    /**
    * @brief 得到猪的重量
    * @param [string] 参数名称   
    *
    * @retval 0     成功
    * @retval -1    失败
    * @pre file 必须使用OpenFile的返回值
    */
    int getPigWeight()
    {
        return PigWeight;
    }
    //构造函数
    //PigInfo(string pigname, int pigweight);
    /**
    * @brief 显示猪的属性
    *
    */
    void ShowInfo();
    //
 
    PigInfo(int sRoll, std::string sName) :
        PigWeight(sRoll), PigName(sName)
    {
    }
    /**
    *
    */
    bool operator <(const PigInfo& pigObj) const
    {
        return PigWeight < pigObj.PigWeight;
    }
 
};
 
 
/*
构造函数
PigInfo::PigInfo(string PigName, int PigWeight)
{
    //构造函数函数体内进行赋值操作
    this->PigName = PigName;
    this->PigWeight = PigWeight;
}
*/
 
/**
    * @brief 显示猪的属性 方法
    * Geovin Du,涂聚文
*/
void PigInfo::ShowInfo()
{
    cout << "小猪名称:" << this->getPigName() << ",重量:" << this->getPigWeight() << endl;
    //cout << "" << this->getPigWeight() << endl;
}
 
 
#endif

  

调用:

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
// cppdemo.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
 
#include <iostream>
#include<string.h>
#include<math.h>
#include<list>
#include <algorithm>
#include <vector>
#include "PigInfo.h"
#include "geoivndu.h"
 
using namespace std;
using namespace geovindu;
 
 
class Rectangle {
    int width, height;
public:
    void set_values(int, int);
    int area() { return width * height; }
};
 
void Rectangle::set_values(int x, int y) {
    width = x;
    height = y;
}
 
 
 
 
int main()
{
    //std::cout << "Hello World!涂聚文\n";
 
    /*Rectangle rect;
    rect.set_values(3, 4);
    cout << "area: " << rect.area();
    */
    //if 比较小猪
    Geovin geovin;
    geovin.getPig();
 
 
 
    //PigInfo piginfo;
    std::list<PigInfo> pigInfoList;
 
    ;
    string name;
    int weight;
 
    std::cout << "输入三个小猪的重量\n";
    //piginfo.SetPigName("geovindiu");
    //piginfo.SetPigWeight(25);
    for (int i = 1; i < 4; i++)
    {
        std::cout << "请输入第"<<i<<"只小猪的名称" << endl;
        cin >> name;
        std::cout << "请输入第"<<i<<"只小猪的重量" << endl;
        cin >> weight;
        //piginfo.SetPigName(name);
        //piginfo.SetPigWeight(weight);
        //piginfo.ShowInfo();
 
        PigInfo piginfo(weight,name);
        pigInfoList.push_back(piginfo);
 
    }
 
    cout << "名称:" << "\t" << "重量:" << "\t" << endl;
    for (auto info : pigInfoList)
    {
        cout <<""<< info.getPigName() << "\t"<<info.getPigWeight() << endl;
    }
    int len = sizeof(pigInfoList);// / sizeof(pigInfoList[0]);
 
    //排序
    pigInfoList.sort();
    //sort(pigInfoList, sizeof(pigInfoList));
    //vector<PigInfo> v(PigInfo, size(pigInfoList));
    cout << "重量排序\n名称:" << "\t" << "重量:" << "\t" << endl;
    for (PigInfo p:pigInfoList)
    {
        cout << "" << p.getPigName() << "\t" << p.getPigWeight() << endl;
    }
 
    system("pause");
    return 0;  
 
}
 
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单
 
// 入门使用技巧:
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

  

输出

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
请输入第一只小猪pig1的重量
20
请输入第二只小猪pig2的重量
8
请输入第三只小猪pig3的重量
87
此时三只小猪的重量分别为:pig1=20,pig2=8,pig3=87,
小猪3最重,它的重量为:87
三只小猪一样重
大小排序:第三只小猪:87>第一只小猪:20>第二只小猪:8
输入三个小猪的重量
请输入第1只小猪的名称
小花
请输入第1只小猪的重量
45
请输入第2只小猪的名称
小白
请输入第2只小猪的重量
20
请输入第3只小猪的名称
小草
请输入第3只小猪的重量
880
名称:  重量:
小花    45
小白    20
小草    880
重量排序
名称:  重量:
小白    20
小花    45
小草    880
请按任意键继续. . .

  

 

posted @   ®Geovin Du Dream Park™  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示