1.题目 2.思路 成绩排序题,定义一个学生结构体vector数组vectorstudentstu(n)再进行sort。题目说了相同成绩的按照先录入的顺序排列,可以用stable_sort保证两个结构体的内
1.题目
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;
}