C++ set 多级排序 多维度排序
Posted 软件工程小施同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ set 多级排序 多维度排序相关的知识,希望对你有一定的参考价值。
#include <iostream>
#include <set>
#include<algorithm>
using namespace std;
/*Student结构体*/
struct Student {
string name;
int id;
int score;
};
/*“仿函数"。为Student set指定排序准则*/
class studentSortCriterion {
public: /*类型要与set容器类型一致*/
bool operator() (const Student *a, const Student *b) const {
return (a->id == b->id) ? (a->score > b->score) :(a->id > b->id);
}
};
int main()
{
set<Student*, studentSortCriterion> stuSet;
set<Student*> stus;
Student stu1, stu2,stu3;
stu1.name = "张三";
stu1.id =2;
stu1.score = 100;
stu2.name = "李四";
stu2.id = 1;
stu2.score = 90;
stu3.name = "小明";
stu3.id = 3;
stu3.score = 80;
stuSet.insert(&stu1);
stuSet.insert(&stu2);
stuSet.insert(&stu3);
Student stuTem;
stuTem.score = 80;
stuTem.id = 3;
Student* stuTempPtr;
set<Student*, studentSortCriterion>::iterator iter;
iter = stuSet.find(&stuTem);
if(iter != stuSet.end()) {
cout << (*iter)->name << endl;
} else {
cout << "Cannot find the student!" << endl;
}
for(std::set<Student*,studentSortCriterion>::iterator it = stuSet.begin();it!=stuSet.end();it++ ){
std::cout<<(*it)->name<<endl;
}
}
上面程序会根据学生ID先进行排名然后再根据分数进行排名,排序准则需要满足以下要求,摘自C++标准库第二版:
输出结果:
小明
小明
张三
李四
以上是关于C++ set 多级排序 多维度排序的主要内容,如果未能解决你的问题,请参考以下文章
如何针对 C、C++ 或 Fortran 中的另一个多维数组快速对多维数组进行十亿点排序?