之前在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