轉載兩篇博客:
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++標准庫第二版:
輸出結果:
小明
小明
張三
李四