前言
有的时候需要大量存储批量数据,可以考虑使用数组。但是数组只能存储一组同样数据类型的消息,那么我们就可以用结构体。
结构体定义
结构体就是把一些不同类型的信息聚合成一个整体,以便于处理信息。
结构体的定义形式:
struct 类型名 {
类型1 变量1;
类型2 变量2;
//……
类型n 变量n;
}结构体变量名;//可以改成数组比如说a[10000]
struct 我们定义的类型名 结构体变量名//这里的"struct"不加也可以
题目
1183:病人排队
【题目描述】
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
1.老年人(年龄 >= 60岁)比非老年人优先看病。
2.老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
3.非老年人按登记的先后顺序看病。
【输入】
第1行,输入一个小于100的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
【输出】
按排好的看病顺序输出病人的ID,每行一个。
【输入样例】
5
021075 40
004003 15
010158 67
021033 75
102012 30
【输出样例】
021033
010158
021075
004003
102012
代码
#include<bits/stdc++.h>
using namespace std;
struct node {
string id;//名字
int age;//年龄
int order;//来的顺序
} a[150];//定义结构体数组
bool cmp(node A,node B) {
if(A.age>=60&&B.age>=60) {
if(A.age != B.age) {//年龄不相等就直接比较
return A.age>B.age;
} else {//年龄相等就比较来的顺序
return A.order<B.order;
}
} else if(A.age<60&&B.age<60) {//都是年轻人就比较来的顺序
return A.order<B.order;
} else {//一个年轻人,一个老年人,老年人先
return A.age>B.age;
}
}
int main() {
int n;
cin>>n;
for(int i=0; i<n; i++) {
cin>>a[i].id>>a[i].age;//输入
a[i].order=i;//记录顺序
}
sort(a,a+n,cmp);//排序
for(int i=0; i<n; i++) {//输出排序后的名次
cout<<a[i].id<<endl;
}
}
结语
总的来说结构体是比较简单的,就那么一点东西,相信你很快就会了!
再见!记得三连!