STL之priority_queue

来源:互联网 发布:好听的未注册域名 编辑:程序博客网 时间:2024/05/21 09:51

priority_queue用法


priority_queue在STL中模拟实现

先写一个用STL模板实现的与真正STL的priority_queue用法相似的priority_queue,以加深理解。

#include "iostream"#include "vector"#include "string"#include "queue"#include "algorithm"using namespace std;struct ListNode{    int val;    ListNode* next;    ListNode(int x):val(x),next(NULL){}};class priority_queue1{public:    void push(int t){        data.push_back(t);        push_heap(data.begin(),data.end());    }    void pop(){        pop_heap(data.begin(),data.end());        data.pop_back();    }    int size(){        return data.size();    }    int top(){        return data.front();    }    bool empty(){        return data.empty();    }protected:private:    vector<int>data;};int main(){    priority_queue1 test;    test.push(6);   test.push(3);    test.push(9);   test.push(11);    while (!test.empty()){        cout <<test.top()<<endl;        test.pop();    }    return 0;}

priority_queue的一些介绍

其模板带三个参数:

priority_queue < type , container , functional >
分别代表数据类型,容器,函数比较方式。
容器不能是list,默认为vector
比较方式默认用operator<,这样就是最大堆,对头元素最大

#include "iostream"#include "vector"#include "string"#include "queue"#include "algorithm"using namespace std;struct ListNode{    int val;    ListNode* next;    ListNode(int x):val(x),next(NULL){}};struct Node{    int x,y;    Node(int a=0,int b=0):x(a),y(b){}};struct cmp{    bool operator()(Node a,Node b){        if (a.x==b.x){            return a.y>b.y;        }        return a.x>b.x;    }};int main(){    priority_queue<Node,vector<Node>,cmp>q;    for (int i=0;i<10;i++){        q.push(Node(rand(),rand()));    }    while (!q.empty()){        cout<<q.top().x<<' '<<q.top().y<<endl;        q.pop();    }    return 0;}
  • return a.x>b.x 似乎是顶端最小,尾部最大
  • Node(rand(),rand()) – 注意这边是括号呢

上述程序运行结果


0 0