C++对自定义数据类型使用list.sort()进行排序-问题求解答

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<list>
#include<string>

using namespace std;

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 mycomparePerson(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 printListPerson(list<Person>& L)
{
	for (list<Person>::iterator it = L.begin(); it != L.end(); it++)
	{
		cout << "姓名:" << it->m_Name << " " << "年龄:" << it->m_Age  <<" "<<"身高:"<<it->m_Height<<endl;
	}

}
void test()
{
	list<Person>L;
	Person p1("LiLy",10,110);
	Person p2("Lisa", 20,120);
	Person p3("Jennie",17,180);
	Person p4("Rose", 19,180);
	Person p5("Jisso", 28,175);
	Person p6("Hong", 28,160);
	Person p7("Wei", 28,196);

	L.push_back(p1);
	L.push_back(p2);
	L.push_back(p3);
	L.push_back(p4);
	L.push_back(p5);
	L.push_back(p6);
	L.push_back(p7);

	L.sort(mycomparePerson);
	printListPerson(L);

}

int main()
{
	test();
	system("pause");
	return EXIT_SUCCESS;
}



利用C++中list.sort()对自定义Person()数据类型排序,年龄从小到大排序,如果年龄相同则按照身高从大到小排序,代码如上

输出如下:

 所有的身高输出全是-842150451

求大佬帮助分析一下,这是什么原因,怎么修改?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++中,如果要对自定义数据类型进行排序,可以使用sort()函数,并传入一个自定义的比较函数作为第三个参数。比较函数需要接受两个参数,这两个参数是要比较的两个元素,比较函数需要返回一个bool值,表示第一个参数是否应该排在第二个参数之前。 在给定的例子中,我们定义了一个Person类,其中包含姓名和年龄两个成员变量。我们还定义了一个myCompare()函数作为比较函数,该函数根据Person对象的年龄进行比较,如果第一个参数的年龄大于第二个参数的年龄,则返回true,否则返回false。 在test01()函数中,我们创建了一个vector容器,并向其中添加了几个Person对象。然后,我们使用sort()函数对vector容器中的元素进行排序,传入myCompare()函数作为比较函数。最后,我们使用迭代器遍历vector容器,并输出排序后的结果。 运行该程序,我们可以看到按照Person对象的年龄从大到小的顺序进行了排序。 所以,要在C++中对自定义数据类型进行排序,需要定义一个比较函数,并将其作为sort()函数的第三个参数传入。比较函数根据需要的排序顺序返回true或false。 #### 引用[.reference_title] - *1* *2* [c++ vector自定义数据类型做排序](https://blog.csdn.net/u012029030/article/details/100041961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C++中的sort自定义排序函数](https://blog.csdn.net/weixin_41588502/article/details/86620305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值