概述
结构体内重载定义
【代码模板】
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)
【使用方法】
优先队列:
注意:优先队列中的头元素用top()方法 (对比普通队列中取头元素用的是front()方法)
int q1 = que.top().u;
int q2 = que.top().v;
对比普通数据类型优先队列,这里以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);
在leetcode上自定义sort函数中的cmp需要加static声明。因为在class类中的sort函数的参数cmp,定义时要声明为static,static静态成员函数不用加对象名,就能直接访问函数(这也是静态成员函数的一大优点)
数组排序:
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>())
最后
以上就是粗暴书本为你收集整理的【C/C++】结构体内重载(优先队列或sort()函数对结构体里的元素进行结构体排序)的全部内容,希望文章能够帮你解决【C/C++】结构体内重载(优先队列或sort()函数对结构体里的元素进行结构体排序)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复