priority_queue自定义比较函数的两种方法

发布时间 2023-05-30 15:37:32作者: 夕归
 1 #include <iostream>
 2 #include <vector>
 3 #include <queue>
 4 using namespace std;
 5 int main() {
 6     struct ListNode {
 7         int val;
 8         ListNode* next;
 9         ListNode() : val(0), next(nullptr) {}
10         ListNode(int x) : val(x), next(nullptr) {}
11         ListNode(int x, ListNode* next) : val(x), next(next) {}
12     };
13 
14     struct {
15         bool operator()(ListNode* a, ListNode* b)
16         {
17             return a->val > b->val;
18         }
19     } cmp1;
20 
21     auto cmp2 = [](ListNode* a, ListNode* b)
22     {
23         return a->val > b->val;
24     };
25 
26     priority_queue< ListNode*, vector< ListNode*>, decltype(cmp1)> pqClass;
27     priority_queue< ListNode*, vector< ListNode*>, decltype(cmp2)> pqLamda{ cmp2 };
28     std::vector<int> numbers = { 9, 5, 7, 1, 3 };
29     for (int num : numbers) {
30         std::cout << num << " ";
31         pqClass.push(new ListNode(num));
32     }
33     std::cout << std::endl;
34     while (!pqClass.empty()) {
35         std::cout << pqClass.top()->val << " ";
36         pqClass.pop();
37     }
38     std::cout << std::endl;
39 
40     priority_queue<int> pqDefaut;
41     for (int num : numbers) {
42         pqDefaut.push(num);
43     }
44     while (!pqDefaut.empty()) {
45         std::cout << pqDefaut.top()<< " ";
46         pqDefaut.pop();
47     }
48     std::cout << std::endl;
49 
50     priority_queue<int, vector<int>, greater<int>> pqGreater;
51     for (int num : numbers) {
52         pqGreater.push(num);
53     }
54     while (!pqGreater.empty()) {
55         std::cout << pqGreater.top() << " ";
56         pqGreater.pop();
57     }
58     std::cout << std::endl;
59     
60     return 0;
61 }