list容器案例:对年龄升序,身高降序多条件限制高级排序(附C++代码)

在这里插入图片描述

💪 图像算法工程师,专业从事且热爱图像处理,图像处理专栏更新如下👇:
📝《图像去噪》
📝《超分辨率重建》
📝《语义分割》
📝《风格迁移》
📝《目标检测》
📝《图像增强》
📝《模型优化》
📝《模型实战部署》
📝《图像配准融合》
📝《数据集》
📝《高效助手》
📝《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容器案例:对年龄升序,身高降序多条件限制高级排序实现方法,希望能帮你理解!本人参考学习的是黑马程序员,仅作为笔记记录。

感谢您阅读到最后!😊总结不易,多多支持呀🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖

关注下面「视觉研坊」,获取干货教程、实战案例、技术解答、行业资讯!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

视觉研坊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值