keep码
度过大难,将有大成。 继续努力,终成大器。
#include<iostream>
using namespace std;
#include<stack>
#include<string>
#include<list>

//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();

    //test02();

    system("pause");

    return 0;
}

 

posted on 2021-12-03 15:19  keep码  阅读(553)  评论(0编辑  收藏  举报