1 C++对stdvector内存储的结构体按照结构体内某个成员进行升序排序和降序排列

假设有一个Person结构体

struct Person
{
    std::string name;
    int age;
    int score;

    Person(const std::string& name_in, int age_in, int score_in)
    {
        name = name_in;
        age = age_in;
        score = score_in;
    }
};

现在定义一个std::vector保存Person结构体的数据

    std::vector<Person> persons;

    Person person_a("zhnagsan",18,52);
    Person person_b("lisi", 19, 85);
    Person person_c("wangwu", 17, 96);

    persons.emplace_back(person_a);
    persons.emplace_back(person_b);
    persons.emplace_back(person_c);

如果现在我们将存储在std::vector中的Person结构体按照Person的score成员进行降序和升序排列,我们需要使用std::sort方法。使用std::sort方法对std::vector进行排序需要定义一个比较函数,这里我们分别定义升序排列函数和降序排列函数

// 升序排列比较函数
static bool PersonCompareAscend(const Person& a, const Person& b)
{
    return a.score < b.score;
}

// 降序排列比较函数
static bool PersonCompareDescend(const Person& a, const Person& b)
{
    return a.score > b.score;
}

完整的示例代码如下

#include <iostream>
#include <vector>
#include <algorithm>

struct Person
{
    std::string name;
    int age;
    int score;

    Person(const std::string& name_in, int age_in, int score_in)
    {
        name = name_in;
        age = age_in;
        score = score_in;
    }
};

// 升序排列比较函数
static bool PersonCompareAscend(const Person& a, const Person& b)
{
    return a.score < b.score;
}

// 降序排列比较函数
static bool PersonCompareDescend(const Person& a, const Person& b)
{
    return a.score > b.score;
}

void PrintVector(const std::vector<Person>& persons)
{
    for (size_t i = 0; i < persons.size(); ++i)
    {
        std::cout << persons[i].name << "," << persons[i].age << "," << persons[i].score << std::endl;
    }
}

int main()
{
    std::vector<Person> persons;

    Person person_a("zhnagsan",18,52);
    Person person_b("lisi", 19, 85);
    Person person_c("wangwu", 17, 96);

    persons.emplace_back(person_a);
    persons.emplace_back(person_b);
    persons.emplace_back(person_c);

    // 升序排列
    std::sort(persons.begin(), persons.end(), PersonCompareAscend);
    std::cout << "升序排列结果:" << std::endl;
    PrintVector(persons);

    // 降序排列
    std::sort(persons.begin(), persons.end(), PersonCompareDescend);
    std::cout << "降序排列结果:" << std::endl;
    PrintVector(persons);

    return 0;
}

输出结果如下

升序排列结果:
zhnagsan,18,52
lisi,19,85
wangwu,17,96
降序排列结果:
wangwu,17,96
lisi,19,85
zhnagsan,18,52