C++ 知识点选讲 4——结构体(struct)

这里介绍结构体(struct)。

建立

struct node/*可以自己命名*/{
	int a,b;
	double f;
	//可以自己添加
};

声明

1
struct node/*可以自己命名*/{
	int a,b;
	double f;
	//可以自己添加
}t;//声明了一个结构体 node 类型的 t

2
struct node/*可以自己命名*/{
	int a,b;
	double f;
	//可以自己添加
};
node t;//声明了一个结构体 node 类型的 t

两种方法都可以声明一个结构体 node 类型的 \(t\)

访问元素

示例:

t.a//t 里面的 a 变量

运算符重载

这里只讲外部重载。

bool operator <(const node &o,const node &p){
	if(o.a!=p.a) return o.a<p.a;//先按 a 排序  
	return o.b<p.b;//再按 b 排序
}

其实跟 sort 里的 cmp 差不多。

例题(洛谷 B2125)

题目描述

输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。

输入格式

第一行输入一个正整数 \(N\)\(N \le 100\)),表示学生人数。

接着输入 \(N\) 行,每行包括一个整数和一个字符串,用空格分开,代表分数姓名。

分数是一个非负整数,且小于等于 \(100\)

姓名为一个连续的字符串,中间没有空格,长度不超过 \(20\)

数据保证所有同学的姓名都不同,而且最高分只有一位同学。

输出格式

获得最高分数同学的姓名。

输入输出样例 #1

输入 #1
5
87 lilei
99 hanmeimei
97 lily
96 lucy
77 jim
输出 #1
hanmeimei

说明/提示

hanmeimei 的分数最高 \(99\) 分。

结构体有一个好处,就是可以通过 sort 中的 cmp 进行排序,而数据不会错位。如果单开几个数组,排序完后数据可能会错位,导致答案错误。这也是结构体比较常用的原因。

核心代码:

#include<bits/stdc++.h>
using namespace std;
struct node{
    int k;
    string s;
}a[105];
bool cmp(node x,node y){return x.k>y.k;}
int main(){
    int n;
    scanf("%d",&n);
    for(int i=1; i<=n; i++) cin >> a[i].k>>a[i].s;
    sort(a+1,a+n+1,cmp);
    cout << a[1].s;
    return 0;
}
posted on 2026-06-30 22:31  lz5332t  阅读(7)  评论(0)    收藏  举报