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类重载<,>,<=,>=,==,++,<<,>>运算符,并构建排序函数,将时间进行升序排序)

C++(三十六) — 等号操作符重载

C++ 运算符重载

重载运算符