基本操作
跟队列的基本操作一样,也包含在queue这个头文件。  
1. empty() 如果队列为空返回真  
2. pop() 删除对顶元素  
3. push() 加入一个元素  
4. size() 返回优先队列中拥有的元素个数  
5. top() 返回优先队列对顶元素   
注意:默认优先队列先出队的元素为优先级最高的元素,在默认的int型中先出队的是最大的元素。标准库默认使用元素类型的 < 操作符来确定它们之间的优先级关系
实现方式
1. 基本数据类型的优先队列
默认是从大到小
| 1
2
3
4
5
6
7
8
9
10
 | int a[] = {4,7,3,8};
priority_queue<int> intQ;
for (int i=0; i<4; i++) {
    intQ.push(a[i]);
}
while (!intQ.empty()) {
    cout<<intQ.top()<<" ";
    intQ.pop();
}
cout<<endl;
 | 
输出:8 7 4 3
从小到大
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 | int a[] = {4,7,3,8};
//priority_queue另一种实现方式
//第一个参数是数据类型
//第二个参数是容器类型,默认用vector
//第三个参数是比较函数类型,默认是less<>,这里可以传入仿函数
priority_queue<int,vector<int>,greater<int>> intQ;
for (int i=0; i<4; i++) {
    intQ.push(a[i]);
}
while (!intQ.empty()) {
    cout<<intQ.top()<<" ";
    intQ.pop();
}
cout<<endl;
 | 
输出:3 4 7 8
2. 自定义数据类型的优先队列
在自定义的结构体内重载<运算符
| 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
 | #include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct Node {
    int val;
    Node(int v)
    :val(v)
    {
    }
    //在结构体内重载<运算符
    bool operator<(const Node &a)const{
        return val>a.val;//val小的优先级高
    }
};
int main(int argc, const char * argv[]) {
  priority_queue<Node> q;
   Node n1(3);
    Node n2(4);
    Node n3(1);
    q.push(n1);
    q.push(n2);
    q.push(n3);
    while (!q.empty()) {
        cout<<q.top().val<<" ";
        q.pop();
    }
    cout<<endl;
    return 0;
}
 | 
输出: 1 3 4
在结构体外重载<操作符
| 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
 | #include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct Node {
    int val;
    Node(int v)
    :val(v)
    {
    }
};
//重载<操作符
bool operator<(Node a,Node b){
    return a.val > b.val ;
}
int main(int argc, const char * argv[]) {
  priority_queue<Node> q;
    Node n1(3);
    Node n2(4);
    Node n3(1);
    q.push(n1);
    q.push(n2);
    q.push(n3);
    while (!q.empty()) {
        cout<<q.top().val<<" ";
        q.pop();
    }
    cout<<endl;
    return 0;
}
 | 
输出:1 3 4
自定义比较函数
| 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
 | #include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct Node {
    int val;
    Node(int v)
    :val(v)
    {
    }
};
//仿函数
struct Compare {
   //重载()操作符
    bool operator()(Node a,Node b){
        return a.val > b.val;//val小的优先级高
    }
};
int main(int argc, const char * argv[]) {
    priority_queue<Node,vector<Node>,Compare> q;
    Node n1(3);
    Node n2(4);
    Node n3(1);
    q.push(n1);
    q.push(n2);
    q.push(n3);
    while (!q.empty()) {
        cout<<q.top().val<<" ";
        q.pop();
    }
    cout<<endl;
    return 0;
}
 | 
输出:1 3 4