優先度付きキュー

優先度付きキュー（ゆうせんどつきキュー、）は、以下の4つの操作をサポートする抽象データ型である。
実装.
優先度付きキューを実装する最も簡単な方法は、連想配列を用いて、それぞれの優先度に要素のリストを繋げることである。連想リストやハッシュテーブルを連想配列の実装に用いた場合は、要素の追加はO(1)であるが、要素の削除や先頭の参照にはすべてのキーを探索しなければならないのでO("n")かかる。もし、平衡2分探索木を使用した場合は、上記の3つの操作をO(log "n")で行うことができる。平衡木は用意されているが、それ以上のものは用意されていない場合は、これが一般的な方法である。
は連想配列の一種で、上記の3つの操作をO(log log "n")で行うことができるが、キューの空間コストがO(2m/2)かかる。ここで、"m"は優先度を表現するために必要なビット数である。
上記のアプローチよりも性能がよかったり、より多くの操作を提供するヒープデータ構造は多い。
C++.
STLにはコンテナアダプタとしてpriority_queueが存在する。同じ優先度を持つ2要素の順番は定義されていない。C++の抽象データ型の定義に準拠しているが、イテレータによる要素へのアクセスを認めていないため、コンテナとしての要件は満たさない。実装はコンパイラ依存であり、GCC (libstdc++-v3)では二分ヒープが採用されている。
g++拡張のPBDSには内部データ構造を選択可能なpriority_queueが存在し、デフォルトはペアリングヒープである。
Java.
codice_1 が標準クラスライブラリにあり、二分ヒープで実装されている。
Java 8 現在、計算量は以下の通り。優先度の変更は API が無いので 先頭以外の削除 → 追加 で実装できるが、先頭以外の削除が一般的な二分ヒープよりも計算量が多いことに注意。ダイクストラ法などで使う場合は違う実装を使った方が良い。
ソートとの関係.
優先度付きキューからはソートを思い浮かべることができる。つまり、ソートしたい要素をすべて優先度付きキューに入れて順番に取り出せばそれはソートされている。優先度付きキューによる抽象化を取り除くと、これは実際にいくつかのソートアルゴリズムで用いられている手続きである。このソート法は以下のソートアルゴリズムと等しくなる。