黑马程序员C++ 教程从0到1入门–c++编程实例--list容器实例

list容器:排序案例
案例描述:将Person自定义数据类型进行排序,Person中有属性姓名、年龄、身高。
排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序(C++实现

#include
using namespace std;
#include 
#include 

//list容器 排序案例 对于自定义数据类型 做排序

//按照年龄进行升序,如果年龄相同按照身高进行降序

class Person
{
public:
	Person(string name,int age,int height)  //初始化三个属性
	{
		this->m_Name = name;
		this->m_Age = age;
		this->m_Height = height;
	}

	string m_Name; //姓名
	int m_Age;   //年龄
	int m_Height; // 身高
};


//指定排序规则
bool comparePerson(Person &p1,Person &p2)
{
	//按照年龄 升序
	if (p1.m_Age == p2.m_Age)
	{
		//年龄相同  按照身高降序
		return p1.m_Height > p2.m_Height;
	}
	else
	{
		return  p1.m_Age < p2.m_Age;
	}
	
}

void test01()
{
	list<Person>L; //创建容器

	//准备数据
	Person p1("刘备", 35, 175);
	Person p2("曹操", 45, 180);
	Person p3("孙权", 40, 170);
	Person p4("赵云", 25, 190);
	Person p5("张飞", 35, 160);
	Person p6("关羽", 35, 200);

	//插入数据
	L.push_back(p1);
	L.push_back(p2);
	L.push_back(p3);
	L.push_back(p4);
	L.push_back(p5);
	L.push_back(p6);

	for (list<Person>::iterator it = L.begin(); it != L.end(); it++)
	{
		cout << "姓名: " << (*it).m_Name << " 年龄: " << it->m_Age << " 身高: " << it->m_Height << endl;
	}

	//排序
	cout << "---------------------------------" << endl;
	cout << "排序后:" << endl;

	L.sort(comparePerson);  //自定义数据类型需要指定排序规则
	for (list<Person>::iterator it = L.begin(); it != L.end(); it++)
	{
		cout << "姓名: " << (*it).m_Name << " 年龄: " << it->m_Age << " 身高: " << it->m_Height << endl;
	}
}

int main() {

	test01();

	system("pause");

	return 0;
}

其中,关键点是对自定义类的数据进行排序的规则建立,
L.sort(comparePerson); //自定义数据类型需要指定排序规则

规则在于这个comparePerson()函数中:

//指定排序规则
bool comparePerson(Person &p1,Person &p2)
{
	//按照年龄 升序
	if (p1.m_Age == p2.m_Age)
	{
		//年龄相同  按照身高降序
		return p1.m_Height > p2.m_Height;
	}
	else
	{
		return  p1.m_Age < p2.m_Age;
	}
	
}

你可能感兴趣的:(C++系统实例,c++,list,容器)