0
点赞
收藏
分享

微信扫一扫

【C/C++】结构体内重载(优先队列或sort()函数对结构体里的元素进行结构体排序)

结构体内重载定义

【代码模板】

struct node{
        int u, v;
        friend bool operator < (node a , node b){
            if(a.u == b.u) return a.v > b.v;
            return a.u > b.u; 
            //优先队列中的排序大小与结构体里重载的符号相反
            //sort()函数中的排序大小与结构体里重载的符号一致
        }
};

【注意】 return中的 “>” 和 “<” 符号
优先队列中的排序大小与结构体里重载的符号相反
sort()函数中的排序大小与结构体里重载的符号一致


【声明方式】

优先队列: priority_queue<node> que;
添加或删除n项,一次一个,时间复杂度为nlog(n)

sort()函数 头文件#include <algorithm>
时间复杂度:nlog(n)


【使用方法】

优先队列:

对比普通数据类型优先队列,这里以int为例:

priority_queue<int, vector<int>, less<int> > q1; // 大顶堆,大元素在上
//对于基础类型 默认是大顶堆
priority_queue<int> a; 
//等同于 priority_queue<int, vector<int>, less<int> > a;

priority_queue<int, vector<int>, greater<int> > c;  //这样就是小顶堆
priority_queue<int, vector<int>, greater<int> > q2; // 小顶堆,小元素在上

sort()函数:
默认升序:sort(数组名, 数组名+n);

加上cmp比较函数:sort(数组名, 数组名+n, cmp);

数组排序:

int a[n];
static bool cmp(int a, int b){
	return a > b;
}
sort(a, a + n, cmp);

结构体排序:

Student Stu[100];
bool cmp2(Student a,Student b)
{
    return a.id > b.id;//按照学号降序排列
    //return a.id < b.id;//按照学号升序排列
}
sort(Stu,Stu+100,cmp2);

使用标准库函数:
升序:sort(begin,end,less<data-type>())
降序:sort(begin,end,greater<data-type>())


举报

相关推荐

0 条评论