c++ set容器排序准則


轉載兩篇博客:

http://blog.csdn.net/lishuhuakai/article/details/51404214

http://blog.csdn.net/lihao21/article/details/6302196/

以下是實驗代碼:

#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++標准庫第二版:

 

輸出結果:

小明
小明
張三
李四


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM