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
|
#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
|
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
|
#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; int randomHight = rand() % 31 + 160; 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
|