C++结构体使用及运算符重载
Posted 行码棋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++结构体使用及运算符重载相关的知识,希望对你有一定的参考价值。
结构体
1 含义及声明
需要声明在全局变量位置处
单个结构体声明
struct Point
int x, y;
p;
结构体数组声明
struct Point
int x, y;
p[1005];
2 使用
- 学生信息存储
struct student
int age, id;
string name;
st[10005];
- 平面点坐标存储
struct point
int x, y;
p[10005];
3 运算符重载
优先级设置可以定义在结构体内进行小于号重载,也可以定义在结构体外,我们使用如下结构体进行演示。
//要排序的结构体
struct Point
int x, y;
;
3.1 结构体内部
因为是在结构体内部自定义的规则,一旦需要比较结构体,自动调用结构体内部重载运算符规则。
方式一
struct Point
int x, y;
friend bool operator < (Point a, Point b)
//为两个结构体参数,结构体调用一定要写上friend
if(a.x == b.x)
return a.y < b.y;
return a.x < b.x;//按x从小到大排
;
方式二
struct Point
int x, y;
bool operator < (const Point &a) const
//直接传入一个参数,不必要写friend
if(x == a.x)
return y < a.y;
return x < a.x;//按x升序排列
;
3.2 结构体外部
结构体定义排序规则,只能出现在优先队列等的自定义排序中。
//定义的比较结构体
//注意:cmp是个结构体
struct cmp
//自定义排序规则
bool operator()(const Point& a,const Point& b)
if(a.x == b.x)
return a.y < b.y;
return a.x < b.x; //将小于号比较规则替换为结构体x比较规则
//如果要升序改变不等号方向就好
;
//初始化定义
priority_queue<Point,vector<Point>, cmp> q;
函数自定义排序规则,可以出现在sort
排序中
struct Point
int x, y;
p[1005];
bool cmp(Point a, Point b)
if(a.x == b.x)
return a.y < b.y;
return a.x < b.x;
sort(p + 1, p + 1 + 1000, cmp);
以上是关于C++结构体使用及运算符重载的主要内容,如果未能解决你的问题,请参考以下文章
基础结构体重载,用 char*作为std::map中的key
[C++]——日期类运算符的重载(针对Date类重载<,>,<=,>=,==,++,<<,>>运算符,并构建排序函数,将时间进行升序排序)
[C++]——日期类运算符的重载(针对Date类重载<,>,<=,>=,==,++,<<,>>运算符,并构建排序函数,将时间进行升序排序)