void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
?sort函数:第一个参数为要排序的起始位置,如果是数组,就是数组的起始地址 ? ? ? ? ? ? ? ?第二个参数为要排序的结束位置, 如果是数组,就是数组起始地址+数组结点个数,并非按照地址计算(不需要*4, 下面举例说明)
第三个参数为一个函数,可以直接不写,那么为默认按升序排列,如果写此参数,需自行定义一个函数,该函数格式为return a>b;,如果返回值为true,,表明a确实大于b, 比较符号的左侧会排在前面,在本例中a在前,如果为false,则右侧在前。(为便于记忆,也不需要看返回值多少,我们只看中间比较符号是什么,如果是>号,更大的在前, <号则为更小的在前)下面举例详细说明
题目描述:用一维数组存储学号和成绩, 然后按成绩排序输出,如果成绩相同,按照学号从小到大排序
input:
outout:?
#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
struct Student{
int num;
int score;
};
int compare(Student x, Student y){ //此函数中,若成绩相等,则按照学号升序排列,分数不相等,则分数小的在前面
if(x.score == y.score)
return x.num < y.num;
else
return x.score < y.score;
}
int main(){
int count;
scanf("%d", &count);
Student a[count];
for(int i=0; i<count; i++){
scanf("%d%d", &a[i].num, &a[i].score);
}
sort(a, a+count, compare); //此处为+count
for(int j=0; j<count; j++)
printf("%d %d\n", a[j].num, a[j].score);
}
|