默认优先级是从大到小.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// 最大值优先
struct cmp1{
bool operator () (int &a, int &b){
return a < b;
}
};

// 最小值优先
struct cmp2{
bool operator () (int &a, int &b){
return a > b;
}
};

struct node1{
int a, b;
bool operator < (const node1 &temp) const{
return a + b < temp.a + temp.b; // 以a + b 的值 最大值优先
}
};

struct node2{
int a, b;
bool operator < (const node2 & temp) const{
return a + b > temp.a + temp.b; // 以a + b 的值 最小值优先
}
};

int main(){
// 最大值优先
priority_queue<int>q1;
priority_queue<int, vector<int> , less<int> >q2; // 注意 less<int>>q2; 中间不加空格的话会报错, 因为是右移>> 运算符
priority_queue<int, vector<int> , cmp1>q3;

// 最小值优先
priority_queue<int, vector<int>, greater<int> >q4; // 注意 greater<int>>q4; 中间不加空格的话会报错, 因为是右移>> 运算符
priority_queue<int, vector<int>, cmp2> q5;

// 结构体自定义优先级, 具体优先级顺序看上面
priority_queue<node1>q6;
priority_queue<node2>q7;
return 0;
}

如何理解结构体中overload的小于号呢? (只能重载小于号)

  1. 可以理解为重载后小于号作用是比较出数组中优先级更小的数据,如果返回的是某个数据值更大的一方则值越大优先级越小,相反则值越小优先级越大。
  2. 优先队列是输出优先级最高的数据的队列。
  3. 可以简单的记为与sort中的cmp函数效果相反。
恰似你一低头的温柔,较弱水莲花不胜寒风的娇羞, 我的心为你悸动不休。  --mingfuyan

千万不要图快——如果没有足够的时间用来实践, 那么学得快, 忘得也快。