• 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

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

C++ 发布于2023-12-01 阅读 1,367次 0次评论 0次点赞 本文共1888个字,阅读需要5分钟。

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

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:C++ – 对std::vector存储的结构体按照结构体内某个成员进行升序排序和降序排列

原文链接:https://www.stubbornhuang.com/2900/

发布于:2023年12月01日 17:17:50

修改于:2023年12月01日 17:17:50

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
OpenCV - C++使用try catch捕捉OpenCV异常
OpenCV
下一篇
轻量级目标检测模型和算法整理
目标检测
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号