需求;有一个类,类中有姓名和年龄成员变量,现在要按姓名升序排序,在姓名相同时按名字升序排序。
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
//加入const限制只读,并使用const_iterator
class Person {
public:
Person(string name, int age) {
this->name = name;
this->age = age;
}
string name;
int age;
};
//重载左移运算符
ostream& operator<<(ostream& cout, Person& p) {
/*cout << "姓名:" << p.name << "," << "年龄:" << p.age;*/
return cout;
}
void printPerson(const list<Person>& p) {
for (list<Person>::const_iterator it = p.begin(); it != p.end(); it++) {
cout <<"姓名:"<< (*it).name << "\t"<<"年龄:" <<(*it).age<< endl;
}
}
bool myCompare(Person &p1, Person &p2) {
//若年龄相同
if (p1.age == p2.age) {
return p1.name < p2.name;
}
return p1.age <p2.age;
}
void test() {
list<Person> lst;
Person p1("tom", 12);
Person p2("jack", 12);
Person p3("sim", 16);
Person p4("mike", 14);
Person p5("bob", 11);
Person p6("lol", 11);
lst.push_back(p1);
lst.push_back(p2);
lst.push_back(p3);
lst.push_back(p4);
lst.push_back(p5);
lst.push_back(p6);
cout << "排序前:" << endl;
printPerson(lst);
lst.sort(myCompare);
cout << "排序后:" << endl;
printPerson(lst);
}
int main() {
test();
system("pause");
return 0;
}
輸出:
可以发现年龄已按升序排列,同时在年龄相同时,名字也是按首字母的顺序按升序排列。