之前在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> using namespace std; class priority_queue { private : vector< int >
data; 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 top()
{ return data.front();
} int size()
{ return data.size();
} bool empty()
{ return data.empty();
} }; int main() { priority_queue
test; test.push(
3 ); test.push(
5 ); test.push(
2 ); test.push(
4 ); while (
!test.empty() ){ cout
<< test.top() << endl; test.pop();
} return 0; } |
#include
<iostream> #include
<queue> using namespace std; int main(){ priority_queue< int >
q; for (
int i=
0; i< 10; ++i ) q.push( rand ()
); while (
!q.empty() ){ cout
<< q.top() << endl; q.pop(); } getchar (); return 0; } |
#include
<iostream> #include
<queue> using namespace std; int main(){ priority_queue< int ,
vector< int >,
greater< int >
> q; for (
int i=
0; i< 10; ++i ) q.push( rand ()
); while (
!q.empty() ){ cout
<< q.top() << endl; q.pop(); } getchar (); return 0; } |
#include
<iostream> #include
<queue> using namespace std; struct Node{ int x,
y; Node(
int a=
0, int b=
0 ): x(a),
y(b) {} }; 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>
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(); } getchar (); return 0; } |
#include
<iostream> #include
<queue> using namespace std; 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(); } getchar (); return 0; }
|
原文地址:http://blog.csdn.net/tingting14054765/article/details/41479657