【C++容器篇之list—案例】

188 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

排序案例

案例描述:

  • Person 自定义数据类型进行排序,

  • Person 中属性有姓名(name)、年龄(age)、身高(height)

  • 排序规则:按照年龄进行升序,如果年龄相同按照身高进行降序

【demo】:

#include <iostream>
#include <string>
#include <list>

using namespace std;

class Person
{
public:
    Person(string name, int age, int height)
    {
        this->mName = name;
        this->mAge = age;
        this->mHeight = height;
    }

    void showPerson()
    {
        cout << "name:" << this->mName << " , age:" << this->mAge << " , height:" << this->mHeight << endl;
    }

public:
    string mName;
    int mAge;
    int mHeight;
};

bool comparePreson(Person &p1, Person &p2)
{
    if (p1.mAge == p2.mAge)
    {
        return p1.mHeight > p2.mHeight;
    }
    else
    {
        return p1.mAge > p2.mAge;
    }
}

void test01()
{
    Person p1("张三", 20, 180);
    Person p2("李四", 21, 175);
    Person p3("王五", 22, 178);
    Person p4("赵六", 20, 185);
    Person p5("孙七", 21, 180);
    

    list<Person> pL;
    pL.push_back(p1);
    pL.push_back(p2);
    pL.push_back(p3);
    pL.push_back(p4);
    pL.push_back(p5);
    cout << "============== 排序之前 ============" << endl;
    for (list<Person>::iterator it = pL.begin(); it != pL.end(); it++)
    {
        it->showPerson();
    }
    cout << "============== 排序后 ============" << endl;
    pL.sort(comparePreson);
    for (list<Person>::iterator it = pL.begin(); it != pL.end(); it++)
    {
        it->showPerson();
    }
}
int main()
{
    test01();
    return 0;
}

小结

  • 对于自定义数据类型,必须指定排序规则,否则编译器不知如何进行排序

  • 高级排序只是在排序规则上再进行一次规则制定

list 函数汇总

- assign() 给list赋值 
- back() 返回最后一个元素 
- begin() 返回指向第一个元素的迭代器 
- clear() 删除所有元素 
- empty() 如果list是空的则返回true 
- end() 返回末尾的迭代器 
- erase() 删除一个元素 
- front() 返回第一个元素 
- get_allocator() 返回list的配置器 
- insert() 插入一个元素到list中 
- max_size() 返回list能容纳的最大元素数量 
- merge() 合并两个list 
- pop_back() 删除最后一个元素 
- pop_front() 删除第一个元素 
- push_back() 在list的末尾添加一个元素 
- push_front() 在list的头部添加一个元素 
- rbegin() 返回指向第一个元素的逆向迭代器 
- remove() 从list删除元素 
- remove_if() 按指定条件删除元素 
- rend() 指向list末尾的逆向迭代器 
- resize() 改变list的大小 
- reverse() 把list的元素倒转 
- size() 返回list中的元素个数 
- sort() 给list排序 
- splice() 合并两个list 
- swap() 交换两个list 
- unique() 删除list中重复的元素