zoukankan      html  css  js  c++  java
  • 关于priority_queue运算符重载的问题

    需求是将结点指针存入优先级队列,想自定义优先级规则,但是好几种方法都报错,只有一种可以,代码如下:

    struct ListNode {
        int val;
        ListNode *next;
        ListNode(int x) : val(x), next(NULL) {}
    };
    
    struct compare {
        bool operator()(const ListNode* a, const ListNode* b) const
        {   return a->val > b->val;     }
    };
    
    void test3()
    {
        ListNode* p1 = new ListNode(67);
        ListNode* p2 = new ListNode(29);
        ListNode* p3 = new ListNode(32);
        priority_queue<ListNode*, vector<ListNode*>, compare> pq;
        pq.push(p1);
        pq.push(p2);
        pq.push(p3);
    
        for(int i = 0; i < 3; ++i) {
            cout << pq.top()->val << endl;
            pq.pop();
        }
    }

    报错写法一:

    struct ListNode {
        int val;
        ListNode *next;
        ListNode(int x) : val(x), next(NULL) {}
    };
    
    struct compare {
        bool operator()(const ListNode& a, const ListNode& b) const
        {   return a.val > b.val;     }
    };
    
    void test3()
    {
        ListNode* p1 = new ListNode(67);
        ListNode* p2 = new ListNode(29);
        ListNode* p3 = new ListNode(32);
        priority_queue<ListNode, vector<ListNode>, compare> pq;
        pq.push(*p1);
        pq.push(*p2);
        pq.push(*p3);
    
        for(int i = 0; i < 3; ++i) {
            cout << pq.top().val << endl;
            pq.pop();
        }
    }

    报错写法二:

    struct ListNode {
        int val;
        ListNode *next;
        ListNode(int x) : val(x), next(NULL) {}
    };
    
    struct compare {
        bool operator()(const ListNode a, const ListNode b) const
        {   return a.val > b.val;     }
    };
    
    void test3()
    {
        ListNode* p1 = new ListNode(67);
        ListNode* p2 = new ListNode(29);
        ListNode* p3 = new ListNode(32);
        priority_queue<ListNode, vector<ListNode>, compare> pq;
        pq.push(p1);
        pq.push(p2);
        pq.push(p3);
    
        for(int i = 0; i < 3; ++i) {
            cout << pq.top().val << endl;
            pq.pop();
        }
    }

    希望熟悉这块的大佬可以指教一下

  • 相关阅读:
    第三篇——第二部分——第三文 配置SQL Server镜像——域环境
    DOS命令学习(从入门到精通)
    Cocos2d-x3.0 LoadingBar
    微信对接HIS——微信可查检验结果
    微信iOS SDK文档总结
    Azure编程笔记(4):配置Cloud Service的证书
    android的ViewPager和Animation的一些使用(一)
    小虾米的鳄鱼梦
    Hadoop源码分析21:namenode概要
    Hadoop源码分析20:datanode概要
  • 原文地址:https://www.cnblogs.com/joker1937/p/12287651.html
Copyright © 2011-2022 走看看