首页 > 学院 > 开发设计 > 正文

算法每日一题之成绩排序:std:stable_sort对结构体struct排序

2019-11-11 01:59:10
字体:
来源:转载
供稿:网友
#define _CRT_SECURE_NO_WARNINGS#include <stdlib.h>#include <string.h>#include <stdio.h>#include <iostream>#include <vector>#include <algorithm>using namespace std;typedef struct Student{	char name[256];	int score;	int sore_type;} Student;bool my_compare(const Student* stu1, const Student* stu2){	if (stu1->sore_type == 0)	{		return stu1->score > stu2->score;	}	else	{		return stu1->score < stu2->score;	}}//https://www.nowcoder.com/PRactice/0383714a1bb749499050d2e0610418b1?tpId=40&tqId=21333&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking//c/c++之成绩排序:std:stable_sort对结构体struct排序。/**查找和排序题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩都按先录入排列在前的规则处理。例示:jack      70peter     96Tom       70smith     67从高到低  成绩peter     96jack      70Tom       70smith     67从低到高smith     67Tom       70jack      70peter     96输入描述:输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开输出描述:按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开输入例子:30fang 90yang 50ning 70输出例子:fang 90ning 70yang 50*/int main(){	int count;	//循环处理多个测试用例	while (scanf("%d", &count) != EOF)	{		int type;		scanf("%d", &type);		std::vector<Student*> list;		for (int i = 0; i < count; i++)		{			char name[256] = { 0 };			int score;			scanf("%s", name);			scanf("%d", &score);			Student* stu = new Student();			stu->score = score;			stu->sore_type = type;			strcpy(stu->name, name);			list.push_back(stu);		}		//std::sort(list.begin(), list.end(), my_compare);//存在问题		std::stable_sort(list.begin(), list.end(), my_compare);		for (int i = 0; i < count; i++)		{			Student* stu = list.at(i);			printf("%s %d/n", stu->name, stu->score);		}	}	return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表