C++ – 对std::vector存储的结构体按照结构体内某个成员进行升序排序和降序排列
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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52