之前在C++ primer这本书上没有看到关于优先队列的东西,最近在看A*算法中看到
总结一下
priority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap() 算法实现,也算是堆的另外一种形式。先写一个用 STL 里面堆算法实现的与真正的STL里面的 priority_queue用法相似的priority_queue, 以加深对 priority_queue 的理解
| #include
 <iostream>#include
 <algorithm>#include
 <vector>usingnamespacestd;classpriority_queue{    private:        vector<int>
 data;            public:        voidpush(
intt
 ){             data.push_back(t);
            push_heap(
 data.begin(), data.end());         }                voidpop(){            pop_heap(
 data.begin(), data.end() );            data.pop_back();        }                inttop()
 { returndata.front();
 }        intsize()
 { returndata.size();
 }        boolempty()
 { returndata.empty();
 }};intmain(){    priority_queue
 test;    test.push(
 3 );    test.push(
 5 );    test.push(
 2 );    test.push(
 4 );        while(
 !test.empty() ){        cout
 << test.top() << endl;        test.pop();
 }            return0;} | 
| #include
 <iostream>#include
 <queue>usingnamespacestd;intmain(){    priority_queue<int>
 q;        for(
inti=
 0; i< 10; ++i ) q.push( rand()
 );    while(
 !q.empty() ){        cout
 << q.top() << endl;        q.pop();    }        getchar();    return0;} | 
| #include
 <iostream>#include
 <queue>usingnamespacestd;intmain(){    priority_queue<int,
 vector<int>,
 greater<int>
 > q;        for(
inti=
 0; i< 10; ++i ) q.push( rand()
 );    while(
 !q.empty() ){        cout
 << q.top() << endl;        q.pop();    }        getchar();    return0;} | 
| #include
 <iostream>#include
 <queue>usingnamespacestd;structNode{    intx,
 y;    Node(
inta=
 0, intb=
 0 ):        x(a),
 y(b) {}};booloperator<(
 Node a, Node b ){    if(
 a.x== b.x ) returna.y>
 b.y;    returna.x>
 b.x; }intmain(){    priority_queue<Node>
 q;        for(
inti=
 0; i< 10; ++i )    q.push(
 Node( rand(),
rand()
 ) );        while(
 !q.empty() ){        cout
 << q.top().x << ‘
 ‘<<
 q.top().y << endl;        q.pop();    }        getchar();    return0;} | 
| #include
 <iostream>#include
 <queue>usingnamespacestd;structNode{    intx,
 y;    Node(
inta=
 0, intb=
 0 ):        x(a),
 y(b) {}};structcmp{    booloperator()
 ( Node a, Node b ){        if(
 a.x== b.x ) returna.y>
 b.y;                returna.x>
 b.x; }};intmain(){    priority_queue<Node,
 vector<Node>, cmp> q;        for(
inti=
 0; i< 10; ++i )    q.push(
 Node( rand(),
rand()
 ) );        while(
 !q.empty() ){        cout
 << q.top().x << ‘
 ‘<<
 q.top().y << endl;        q.pop();    }        getchar();    return0;}
 | 
原文地址:http://blog.csdn.net/tingting14054765/article/details/41479657