欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

c++结构体的一种简单实现

程序员文章站 2022-06-10 10:43:58
...

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…