
💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《图像增强》
📝《模型优化》
📝《模型实战部署》
📝《图像配准融合》
📝《数据集》
📝《高效助手》
📝《C++》

一、需求
将Person自定义数据类型进行排序,Person中属性有姓名、年龄、身高。
排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序。
二、实现
根据第一章节中的需求,下面分模块讲解各个部分。
2.1 自定义Person数据类型
定义Person数据类型主要封装共有属性姓名、年龄和身高,代码见下:
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; // 身高
};
2.2 排序规则
排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序。
向实现需求中的排序规则,需要封装一个仿函数或者回调函数,用于定义排序规则,代码见下:
// 指定排序规则
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;
}
}
2.3 创建list容器
创建一个list容器,将成员属性分别赋值存饭在list容器中,读取list容器中数据进行排序,详细实现代码见下:
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;
}
}
2.4 代码
将上面各个小模块的代码组合后的完整代码见下:
#include <iostream>
using namespace std;
#include <list>
#include <algorithm>
#include <string>
// 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;
}
2.5 输出
运行2.4小节代码,输出见下:

三、总结
以上就是ist容器案例:对年龄升序,身高降序多条件限制高级排序实现方法,希望能帮你理解!本人参考学习的是黑马程序员,仅作为笔记记录。
感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖
关注下面「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!
&spm=1001.2101.3001.5002&articleId=144992091&d=1&t=3&u=8eb9bc4a7be84f3e8cce3f92858f2db4)
465

被折叠的 条评论
为什么被折叠?



