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
- {
- // 成绩相等,按照id从小到大排;成绩不相等,按照成绩从大到小排
- return( (a->score == b->score) ? (a->id < b->id) : (a->score > b->score) );
- }
- };
-
-
- int main()
- {
- set<Student*, studentSortCriterion> stuSet;
- set<Student*> stus;
-
- Student stu1, stu2, stu3;
- stu1.name = "张三";
- stu1.id = 1;
- stu1.score = 100;
-
- stu2.name = "李四";
- stu2.id = 2;
- stu2.score = 90;
-
- stu3.name = "小明";
- stu3.id = 3;
- stu3.score = 100;
-
- stuSet.insert( &stu1 );
- stuSet.insert( &stu2 );
- stuSet.insert( &stu3 );
-
-
-
- /* 遍历 */
- for ( std::set<Student*, studentSortCriterion>::iterator it = stuSet.begin(); it != stuSet.end(); it++ )
- {
- std::cout << (*it)->name << (*it)->score << endl;
- }
-
- stu3.score = 200;
-
- /* 遍历 */
- for ( std::set<Student*, studentSortCriterion>::iterator it = stuSet.begin(); it != stuSet.end(); it++ )
- {
- std::cout << (*it)->name << (*it)->score << endl;
- }
-
-
- }
推荐阅读