c++结构体的一种简单实现
c++结构体的实现
近期本代码新手对算法产生了兴趣,在自学的过程中,发现了结构体实在是太好用了吧。于是想把结构体的使用方法记录在博客中,方便以后忘记的时候查询,以及可以为和我一样0基础的代码小白学习参考。
结构体的实现
由于我不太喜欢看繁杂冗长的定义,加上网络上关于结构体定义的帖子已经很多了。所以本博客就通过一道简单的算法题来讲解结构体的实现。
题目来源于洛谷P1104 生日
题目描述
cjf君想调查学校OI组每个同学的生日,并按照从大到小的顺序排序。但cjf君最近作业很多,没有时间,所以请你帮她排序。
输入格式
有2行,
第1行为OI组总人数nn;
第2行至第n+1行分别是每人的姓名s、出生年y、月m、日d。
输出格式
有n行,
即n个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)
输入输出样例
输入 #1
3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1
输出 #1
Luowen
Yangchu
Qiujingya
解题开始!!
好,废话终于讲完了,接下来开始解题
首先我们要定义一个结构体
struct student{
int id;
string name;
int y;
int m;
int d;
}a[105];
在这段代码中,我们定义了一个名为student的结构体,并且定义了一个长度为105的a[105]结构体数组。
bool cmp(student a,student b){
if(a.y < b.y)return true;
else if(a.y == b.y){
if(a.m < b.m) return true;
else if(a.m == b.m){
if(a.d < b.d) return true;
else if(a.d == b.d)
return a.id>b.id;
}
}return false;
}
然后就是这段快排代码,因为题目说要按生日来排序,所以我们直接可以用快排来做,但是由于快排函数默认是定义将一个数组进行排序,所以如果直接将结构体a放进快排函数中,编译会报错,所以我们定义一个函数cmp,用来告诉快排函数该怎么将我们定义的结构体进行排序。(关于快排函数的方法我以后在写一个贴子吧)
ok,那我们这个代码的基本功能就都定义好了,接下来就是调用这两个代码块就可以完成这道简单的算法题了。ac代码呈上:
#include<bits/stdc++.h>
using namespace std;
struct student{
int id;
string name;
int y;
int m;
int d;
}a[105];
bool cmp(student a,student b){
if(a.y < b.y)return true;
else if(a.y == b.y){
if(a.m < b.m) return true;
else if(a.m == b.m){
if(a.d < b.d) return true;
else if(a.d == b.d)
return a.id>b.id;
}
}return false;
}
int main(){
int n;
cin >> n;
for(int i = 0; i < n; i++){
a[i].id = i;
cin >> a[i].name >> a[i].y >> a[i].m >> a[i].d;
}
sort(a,a+n,cmp);
for(int i = 0; i < n; i++){
cout << a[i].name << endl;
}
}
emmm,那么以上就是关于结构体的一种简单的实现了,本蒟蒻的第一次正经写博客,markdown也看不懂,很多细节也没处理好,以后会努力学习,争取写出好看优质赏心悦目的博客。
希望本篇博客能够帮助到和我一样开始学习编程的小可爱们,如果博客质量太低,起不到作用,orz,那我下次努力QAQ…
上一篇: 前端高频面试题总结(二)
下一篇: 快速排序的一种实现