结构体是C++中的一种数据类型,它可以让数据的储存、运算、输出更加方便。
就比如说要求对几个学生的成绩进行排序,可是用数组储存的话起码要两个数组:一个储存学号,一个储存成绩。而排序完还要根据成绩顺序的变化而改变学号顺序,不仅麻烦,且时间复杂度、空间复杂度都会更高。
这时,我们就可以用到现在介绍的结构体了。
#include <bits/stdc++.h>
using namespace std;
struct STU{
int number;
int score;
}student[100];
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch==' ')return x*f;
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
void write(int x){
if(x<0)x=-x,putchar('-');
if(x>9)write(x/10);
putchar(x%10+'0');
}
bool cmp(STU a,STU b){
if(a.score==b.score)
return a.number<b.number;
return a.score>b.score;
}
int main(){
int n=read();
for(int i=0;i<n;i++){
student[i].number=read();
student[i].score=read();
}
sort(student,student+n,cmp);
for(int i=0;i<n;i++){
write(student[i].number);
putchar(' ');
write(student[i].score);
putchar('\n');
}
return 0;
}
结构体很简单,用struct来定义,数组后面跟的就是此个元素的其中一种类型名了,需在struct中定义过。这里用到快读快写,可以自行去网上搜一下。
struct STU{
int number;
int score;
}student[100];
看代码片段,定义一个简单的结构体数组的格式为:
struct 结构体名称{
数据类型 变量名;
}数组名称[元素个数];
这样定义,可以使如student[i]单个元素有student[i].number和student[i].score两项数据,无需定义像student_number[100]和student_score[100]两个数组,且排序更方便、更快捷。