结构体内重载定义
【代码模板】
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>())