STL之priority_queue为复合结构排序

简介: priority_queue为复合结构排序:  1 #include 2 #include 3 4 using namespace std; 5 struct Node{ 6 int x; 7 string y; 8 Node(...

priority_queue为复合结构排序: 

 1 #include <iostream>
 2 #include <queue>
 3 
 4 using namespace std;
 5 struct Node{
 6     int x;
 7     string  y;  
 8     Node( int a= 0, string b = "" ):
 9         x(a), y(b) {}
10 };
11 bool operator<( Node a, Node b ){   // 注意这里的顺序和sort()里面的谓词函数不一样!
12                                     // bool为真的 优先级小  
13     if( a.x == b.x ) return a.y < b.y;
14     return a.x < b.x; 
15 }
16       //自定义重载小于操作符 
17 int main(){
18    /********************************************
19    对于自定义类型,则必须自己重载 operator< 
20    自定义类型重载 operator< 后,声明对象时就可以只带一个模板参数。
21    看下面的例子 
22    *******************************************/
23    
24     cout<<"自定义: "<<endl; 
25     priority_queue<Node> q2; 
26     priority_queue<int> q3; 
27     std::string tmp = ""; 
28     
29     for( int i= 10; i>0; --i ){
30         tmp = tmp + "12";
31         q2.push( Node(i, tmp) );
32         q3.push(i);
33     }   
34     while( !q2.empty() ){
35         cout << q2.top().x << ' ' << q2.top().y << endl;
36         q2.pop();
37     }   
38     while( !q3.empty() ){
39         cout << "q3 output: "<<q3.top() << endl;
40         q3.pop();
41     } 
42     //注意上面不能这样来定义:priority_queue<Node, vector<Node>, greater<Node> >;
43     //这样定义是错误的!!!!
44     //原因是:greater<node>没有定义
45 
46     //必须定义如下函数对象,才能这样定义:
47     // priority_queue<Node, vector<Node>, cmp >;
48     /*
49     struct cmp{
50     bool operator() ( Node a, Node b ){
51         if( a.x== b.x ) return a.y> b.y;
52         
53         return a.x> b.x; }
54     };
55    */
56     return 0;
57 }
58 
59 root@u18:~/cp/test# g++ priority.cpp  -g -Wall
60 root@u18:~/cp/test# valgrind  --tool=memcheck --leak-check=yes ./a.out
61 ==24385== Memcheck, a memory error detector
62 ==24385== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
63 ==24385== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
64 ==24385== Command: ./a.out
65 ==24385== 
66 自定义: 
67 10 12
68 9 1212
69 8 121212
70 7 12121212
71 6 1212121212
72 5 121212121212
73 4 12121212121212
74 3 1212121212121212
75 2 121212121212121212
76 1 12121212121212121212
77 q3 output: 10
78 q3 output: 9
79 q3 output: 8
80 q3 output: 7
81 q3 output: 6
82 q3 output: 5
83 q3 output: 4
84 q3 output: 3
85 q3 output: 2
86 q3 output: 1
87 ==24385== 
88 ==24385== HEAP SUMMARY:
89 ==24385==     in use at exit: 0 bytes in 0 blocks
90 ==24385==   total heap usage: 20 allocs, 20 frees, 1,012 bytes allocated
91 ==24385== 
92 ==24385== All heap blocks were freed -- no leaks are possible
93 ==24385== 
94 ==24385== For counts of detected and suppressed errors, rerun with: -v
95 ==24385== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

 

相关文章
|
27天前
|
存储 算法 C语言
【C++】C++ STL探索:Priority Queue与仿函数的深入解析(一)
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
|
27天前
|
编译器 程序员 C++
【C++】C++ STL探索:Priority Queue与仿函数的深入解析(二)
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
|
27天前
|
C++
【C++】C++ STL探索:Priority Queue与仿函数的深入解析(三)
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
|
4月前
|
存储 算法 Java
【C++】优先级队列priority_queue模拟实现&&仿函数
【C++】优先级队列priority_queue模拟实现&&仿函数
36 1
|
6月前
|
算法 C语言 C++
从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)(上)
从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)
46 1
|
6月前
|
算法 C语言 C++
从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)(下)
从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)
26 0
从C语言到C++_20(仿函数+优先级队列priority_queue的模拟实现+反向迭代器)(下)
|
6月前
|
算法 编译器 C++
priority_queue简单实现(优先级队列)(c++)
priority_queue介绍 pri_que是一个容器适配器,它的底层是其他容器,并由这些容器再封装而来。类似于heap的结构。默认为大堆。
56 0
|
6月前
|
存储 算法 调度
【C/C++ 数据结构 优先队列】了解学习`std::priority_queue`的使用
【C/C++ 数据结构 优先队列】了解学习`std::priority_queue`的使用
98 3
|
6月前
|
测试技术 C++
c++优先队列priority_queue(自定义比较函数)
c++优先队列priority_queue(自定义比较函数)
355 0
|
算法 C++ 容器
【C++】priority_queue使用和模拟实现——仿函数(下)
【C++】priority_queue使用和模拟实现——仿函数(下)
【C++】priority_queue使用和模拟实现——仿函数(下)