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++ set 多级排序 多维度排序的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 在 OpenCV 中按深度维度排序

Excel VBA - 多级排序

如何针对 C、C++ 或 Fortran 中的另一个多维数组快速对多维数组进行十亿点排序?

C++ set 排序 修改元素之后不会改变原来的排序

快速入门pandas进行数据挖掘数据分析[多维度排序数据筛选分组计算透视表]

关于C++中vector和set使用sort方法进行排序