结构体的定义与调用
struct 结构体变量名{
类型名 结构体成员名;
}自定义变量;
这里的结构体成员是按照题目要求定义,定义方式不变。
例:
struct node{
int x,y;
}tmp;
上图我自定义了一个node的类型,结构体成员分别是整形变量x y,自定义变量为tmp。
当然,我们也可以在主函数内定义结构体变量。
struct node{
int x,y;
};
int main(){
node tmp;
return 0;
}
那么如何调用结构体变量呢?
结构体变量.结构体成员;
如上例,我想输入一个结构体变量再将它输出:
struct node{
int x,y;
};
int main(){
node tmp;
cin>>tmp.x>>tmp.y;
cout<<tmp.x<<" "<<tmp.y;
return 0;
}
按照上述操作即可定义调用结构体。
结构体的排序与应用
结构体的排序要用到sort函数。
首先我们需要定义一个函数:
bool cmp(node a,node b){
return a.需要比较的结构体成员>b.需要比较的结构体成员;//从大到小
return a.需要比较的结构体成员<b.需要比较的结构体成员;//从小到大
}
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
}a[1000];
int n;
bool cmp(node a,node b){
return a.x<b.x;//从小到大
}
int main(){
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i].x>>a[i].y;
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
cout<<a[i].x<<" "<<a[i].y;
return 0;
}
上例,我将a数组中的结构体成员x按照从小到大排序。
年龄排序
题目描述
输入 n 个学生的信息,包括姓名、性别、出生年月。要求按年龄从小到大依次输出这些学生的信息。数据保证没有学生同年同月出生。
输入格式
第一行一个整数 n,表示学生人数,n≤100。
接下来 n 行,每一行依次输入学生的姓名、性别、出生年份、出生月份。
输出格式
按年龄从小到大,一行输出一个学生的原始信息。
这道题我们只需要对输入的数据进行排序就可以了。
#include<bits/stdc++.h>
using namespace std;
struct sp{
string s,y;
int a,b;
}a[105];
int n;
bool cmp(sp x,sp y){
if(x.a==y.a){
return x.b>y.b;//如果年份相同,按照月份从大到小排序
}
return x.a>y.a;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].s>>a[i].y>>a[i].a>>a[i].b;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
cout<<a[i].s<<" "<<a[i].y<<" "<<a[i].a<<" "<<" "<<a[i].b<<endl;
}
return 0;
}