小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
排序案例
案例描述:
-
将
Person自定义数据类型进行排序, -
Person中属性有姓名(name)、年龄(age)、身高(height) -
排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序
【demo】:
#include <iostream>
#include <string>
#include <list>
using namespace std;
class Person
{
public:
Person(string name, int age, int height)
{
this->mName = name;
this->mAge = age;
this->mHeight = height;
}
void showPerson()
{
cout << "name:" << this->mName << " , age:" << this->mAge << " , height:" << this->mHeight << endl;
}
public:
string mName;
int mAge;
int mHeight;
};
bool comparePreson(Person &p1, Person &p2)
{
if (p1.mAge == p2.mAge)
{
return p1.mHeight > p2.mHeight;
}
else
{
return p1.mAge > p2.mAge;
}
}
void test01()
{
Person p1("张三", 20, 180);
Person p2("李四", 21, 175);
Person p3("王五", 22, 178);
Person p4("赵六", 20, 185);
Person p5("孙七", 21, 180);
list<Person> pL;
pL.push_back(p1);
pL.push_back(p2);
pL.push_back(p3);
pL.push_back(p4);
pL.push_back(p5);
cout << "============== 排序之前 ============" << endl;
for (list<Person>::iterator it = pL.begin(); it != pL.end(); it++)
{
it->showPerson();
}
cout << "============== 排序后 ============" << endl;
pL.sort(comparePreson);
for (list<Person>::iterator it = pL.begin(); it != pL.end(); it++)
{
it->showPerson();
}
}
int main()
{
test01();
return 0;
}
小结:
-
对于自定义数据类型,必须指定排序规则,否则编译器不知如何进行排序
-
高级排序只是在排序规则上再进行一次规则制定
list 函数汇总
- assign() 给list赋值
- back() 返回最后一个元素
- begin() 返回指向第一个元素的迭代器
- clear() 删除所有元素
- empty() 如果list是空的则返回true
- end() 返回末尾的迭代器
- erase() 删除一个元素
- front() 返回第一个元素
- get_allocator() 返回list的配置器
- insert() 插入一个元素到list中
- max_size() 返回list能容纳的最大元素数量
- merge() 合并两个list
- pop_back() 删除最后一个元素
- pop_front() 删除第一个元素
- push_back() 在list的末尾添加一个元素
- push_front() 在list的头部添加一个元素
- rbegin() 返回指向第一个元素的逆向迭代器
- remove() 从list删除元素
- remove_if() 按指定条件删除元素
- rend() 指向list末尾的逆向迭代器
- resize() 改变list的大小
- reverse() 把list的元素倒转
- size() 返回list中的元素个数
- sort() 给list排序
- splice() 合并两个list
- swap() 交换两个list
- unique() 删除list中重复的元素