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
	{
		// 成绩相等,按照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;
	}
    

}

 

以上是关于C++ set 排序 修改元素之后不会改变原来的排序的主要内容,如果未能解决你的问题,请参考以下文章

[C++ STL] set使用详解

C++ STL 之 set 和 pair

set

C++ STL之set详解

C++ STL之set详解

字符串List集合collection.sort排序 set/map集合