• STL之priority_queue为复合结构排序


    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)
  • 相关阅读:
    Fiddler抓包使用教程-会话图标
    Fiddler抓包使用教程-安装配置
    Fiddler抓包使用教程-扫盲篇
    Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目
    Java Web 开发填坑记- 如何正确的下载 Eclipse
    Android 监听 WiFi 开关状态
    Android 获取系统语言(兼容7.0)
    Android 监听手机GPS打开状态
    Android Monkey的使用
    Android 开源库和项目 3
  • 原文地址:https://www.cnblogs.com/chris-cp/p/4631107.html
Copyright © 2020-2023  润新知