结构体的认识与应用

结构体的定义与调用

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值