Quantcast
Channel: Futurismo
Viewing all articles
Browse latest Browse all 91

C++での優先順位付きキューの使い方まとめ(PriorityQueue)

$
0
0

優先順位付きキューのをPriorityQueueという。

キューの中で最大(最小)のものを抜き出す場合などに利用する。

宣言

デフォルトでは大きい順でpopされるので、最小のものをpopで取り出すには、greaterを宣言時に追記する。

#include <queue>
using namespace std;

priority_queue <int> maxpq; // default 大きい順
priority_queue<int, vector<int>, greater<int> > minpq; //小さい順

関数

要素を追加する(push)
pq.push(1);
先頭の要素を取り出す

最大(または最小)の先頭を取り出します。

pq.pop();
要素を調べる
// キューがからかどうかを調べる
pq.empty()

// 要素数をしらべる
pq.size();

// 次に取り出される要素を調べる
pq.top();

Sample

昇順に取り出す

#include <queue>
#include <iostream>
using namespace std;

int main()
{
  priority_queue<int> pq;

  pq.push( 2 );
  pq.push( 1 );
  pq.push( 3 );

  cout << pq.top() << endl;
  pq.pop();
  cout << pq.top() << endl;
  pq.pop();
  cout << pq.top() << endl;
  pq.pop();

  return 0;
}

実行結果

3
2
1

降順に取り出す

#include <queue>
#include <iostream>
using namespace std;

int main()
{
  priority_queue<int, vector<int>, greater<int> > pq;

  pq.push( 2 );
  pq.push( 1 );
  pq.push( 3 );

  cout << pq.top() << endl;
  pq.pop();
  cout << pq.top() << endl;
  pq.pop();
  cout << pq.top() << endl;
  pq.pop();

  return 0;
}

実行結果

1
2
3

おまけ

ダイクストラ法の実装をする際に、C++のSTLがあるとは知らずに、自前で最小優先キューを実装しました。STLを利用すればよかった。

このJava Sourseを参考にC++に書きなおした。
ftp://ftp.cs.princeton.edu/pub/cs226/bins/MinPQ.java


Viewing all articles
Browse latest Browse all 91

Trending Articles