当前位置 : 主页 > 编程语言 > java >

【HJ68】成绩排序(stable_sort)

来源:互联网 收集:自由互联 发布时间:2022-07-17
1.题目 2.思路 成绩排序题,定义一个学生结构体vector数组​​vectorstudentstu(n)​​​再进行sort。题目说了相同成绩的按照先录入的顺序排列,可以用​​stable_sort​​保证两个结构体的内


1.题目

【HJ68】成绩排序(stable_sort)_#include


【HJ68】成绩排序(stable_sort)_i++_02

2.思路

成绩排序题,定义一个学生结构体vector数组​​vector<student>stu(n)​​​再进行sort。题目说了相同成绩的按照先录入的顺序排列,可以用​​stable_sort​​保证两个结构体的内容相同时不交换次序。

从C++ 使用const 引用传递参数​这篇可知:c++使用引用传递节省内存开销。
(1)引用传递是双向的,当在函数中对于形参的数据进行改变后,实参的值也会进行相应的改变。

(2)如果我们既不想改变传入参数的值,也不想因为值传递产生太大的开销,如:可以将void Display(vector res) 改为常引用 void Display(const vector< int >& res) 。

3.代码

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
struct student{
string name;
int score;
};
bool cmp0(const student &a,const student &b){
return a.score>b.score;//从高到低排序
}
bool cmp1(const student &a,const student &b){
return a.score<b.score;//从高到低排序
}
int main(){
int n,type;
while(cin>>n>>type){
vector<student>stu(n);
for(int i=0;i<n;i++){
cin>>stu[i].name>>stu[i].score;
}//输入完毕
if(type==0) stable_sort(stu.begin(),stu.end(),cmp0);
if(type==1) stable_sort(stu.begin(),stu.end(),cmp1);
for(int i=0;i<n;i++){
cout<<stu[i].name<<" "<<stu[i].score<<endl;
}
}
return 0;
}


网友评论