list容器之排序案例
2023-09-14 09:02:34 时间
案例描述:
- 将per类型进行排序,per属性中有姓名,年龄,身高,体重
- 排序规则:按照年龄进行升序排列,如果年龄相同按照身高进行降序排列,如果身高相同按照体重进行升序排列
源码如下:
#include<iostream>
using namespace std;
#include<list>
#include<string>
class per
{
public:
per(string name, int age, int height,int weight);
int age;
string name;
int height;
int weight;
};
//有参构造函数初始化
per::per(string name, int age, int height, int weight)
{
this->name = name;
this->age = age;
this->height = height;
this->weight = weight;
}
//指定排序规则的函数声明
bool comparePerson(per& p1, per& p2);
//打印函数声明
void print(list<per>& person);
//创建相关per类型对象,并放入list容器中,排序然后输出最后结果
void headWork()
{
per p1("一",18,170,120);
per p2("二", 19, 174, 130);
per p3("三", 18, 175, 140);
per p4("四", 20, 178, 125);
per p5("五", 23, 180, 135);
per p6("六", 20, 178, 120);
list<per> person = {p1,p2,p3,p4,p5,p6};
//对list容器中自定义类型元素进行排序
person.sort(comparePerson);
//排完序后打印
print(person);
}
//指定排序规则
bool comparePerson(per& p1,per& p2)
{
//排序规则:按照年龄进行升序排列,如果年龄相同按照身高进行降序排列,如果身高相同按照体重进行升序排列
if (p1.age == p2.age)
{
if (p1.height == p2.height)
{
return p1.weight < p2.weight;
}
else
{
return p1.height > p2.height;
}
}
else
{
return p1.age < p2.age;
}
}
//打印函数
void print(list<per>& person)
{
for (list<per>::iterator it = person.begin(); it != person.end(); it++)
{
cout << "姓名: " << (*it).name << " 年龄: " << (*it).age << " 身高: " << (*it).height << " 体重: " << (*it).weight << endl;
}
}
int main()
{
headWork();
system("pause");
return 0;
}
注意问题:
- 排序规则需要自己去写,详情看制定规则的函数代码
- list容器是双端循环容器,不支持随机跳跃访问,不能用[]和at方式的访问
- 因为标准算法库里面的sort排序函数只支持可以随机跳跃访问的容器,因此list内部有自己的一套sort排序函数,无需添加标准算法头文件,通过对象名访问
相关文章
- 产品运营数据分析—SPSS数据分组案例
- matplotlib-曲线和折线案例
- mysql表损坏故障案例
- Flink(46):Flink之TableAPI和FlinkSQL的案例三
- Atitit.attilax的 case list 项目经验 案例列表
- ML与Optimality:最优化理论(GD随机梯度下降/QN拟牛顿法/CG共轭梯度法/L-BFGS/TR置信域/GA遗传算法/SA模拟退火算法)在机器学习中的简介、常用方法、案例应用之详细攻略
- NLP/CV:Seq2Seq→Encoder-Decoder→Seq2Seq with Attention算法的简介、案例应用之详细攻略
- DataScience之boxcox:scipy.stats.boxcox函数的简介、案例应用(将非正态分布数据转换为正态分布数据)之详细攻略
- AutoML之flaml:基于OpenML数据集利用flaml框架自动寻找最优算法及其对应最佳参数(对比lightgbm和xgboost算法)实现预测航班是否延误二分类任务案例之详细攻略
- ML之LiR:基于编程实现简单线性回归案例
- Computer:正则表达式技术的简介(元字符/普通字符使用字典及其方法总结大全)、相关库介绍、案例应用之详细攻略
- 〖Python 数据库开发实战 - MySQL篇㊱〗- 综合案例 - 关于数据表 password 字段的数据加密
- 机器学习案例(十一):水质分析与预测
- HTML+CSS小实战案例
- tomcat URL简写案例:模拟站点www.baidu.com的訪问
- 机器学习案例 特征组合——高帅富 冷启动——从微博等其他渠道搜集数据进行机器学习 用户年龄——线性分段处理
- MySQL崩溃修复案例