C++小练习-容器与排序

stl容器的升序与降序

案例描述:将Person自定义数据类型进行排序,Person中属性有姓名、年龄、身高

排序规则:按照年龄经行升序,如果年龄相通对身高进行降序

Person类头文件:

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
//
// Created by Beyond on 2024/7/8.
//

#ifndef UNTITLED2_PERSON_H
#define UNTITLED2_PERSON_H

#include <iostream>

using namespace std;

class Person {
private:
int age;
string name;
int height;//单位厘米
public:
Person();

Person(int age, const string &name, int height);

int getAge() const;

void setAge(int age);

const string &getName() const;

void setName(const string &name);

int getHeight() const;

void setHeight(int height);
};


#endif //UNTITLED2_PERSON_H

Person类实现:

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
//
// Created by Beyond on 2024/7/8.
//

#include "Person.h"

Person::Person() {}

Person::Person(int age, const string &name, int height) : age(age), name(name), height(height) {}

int Person::getAge() const {
return age;
}

void Person::setAge(int age) {
Person::age = age;
}

const string &Person::getName() const {
return name;
}

void Person::setName(const string &name) {
Person::name = name;
}

int Person::getHeight() const {
return height;
}

void Person::setHeight(int height) {
Person::height = height;
}

main实现:

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
#include <iostream>
#include <list>
#include "Person.h"

using namespace std;

// 打印人物信息的函数
void printPerson(list<Person> &l) {
for (Person &p: l) {
cout << "姓名:" << p.getName() << " 年龄:" << p.getAge() << " 身高:" << p.getHeight() << endl;
}
}

// 创建人物并添加到列表中的函数
void creativePerson(list<Person> &l) {
string lastName = "ABCDEFGHIJ";
for (int i = 0; i < 10; i++) {
string name = "人物";
int randomAge = rand() % 43 + 18; // 随机年龄,范围18-60
int randomHight = rand() % 31 + 160; // 随机身高,范围160-190
Person p(randomAge, name += lastName[i], randomHight);
l.push_back(p);
}
printPerson(l);
}

// 根据年龄和身高对人物进行排序的函数
void sortPerson(list<Person>& l){
l.sort([](Person &p1, Person &p2) {
if(p1.getAge()==p2.getAge()){
return p1.getHeight()>p2.getHeight(); // 如果年龄相同,则按身高降序排序
}
return p1.getAge()<p2.getAge(); // 按年龄升序排序
});
printPerson(l);
}

int main() {
list<Person> l;
creativePerson(l); // 创建并打印未排序的人物列表
cout<<"排序后:"<<endl;
sortPerson(l); // 对人物列表排序并打印
return 0;
}

结果打印:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
姓名:人物A 年龄:59 身高:182
姓名:人物B 年龄:31 身高:186
姓名:人物C 年龄:52 身高:167
姓名:人物D 年龄:58 身高:161
姓名:人物E 年龄:19 身高:165
姓名:人物F 年龄:47 身高:188
姓名:人物G 年龄:36 身高:185
姓名:人物H 年龄:46 身高:186
姓名:人物I 年龄:46 身高:167
姓名:人物J 年龄:29 身高:171
排序后:
姓名:人物E 年龄:19 身高:165
姓名:人物J 年龄:29 身高:171
姓名:人物B 年龄:31 身高:186
姓名:人物G 年龄:36 身高:185
姓名:人物H 年龄:46 身高:186
姓名:人物I 年龄:46 身高:167
姓名:人物F 年龄:47 身高:188
姓名:人物C 年龄:52 身高:167
姓名:人物D 年龄:58 身高:161
姓名:人物A 年龄:59 身高:182