2012-04-21 16 views
3

高速ソート挿入を実行し、FIFOに基づいて動作するデータ構造を探しています。C++値でソートされたデータ構造と動作するFIFO

私が達成しようとしているのは、一連の値を保持する固定サイズのデータ​​構造です。繰り返しのそれぞれの新しいステップでは、最小値または最大値を効率的に見つけることができます(データ構造を常にソートする必要があります)。そして、新しい要素を挿入する要求に応じて、最も古い要素が自動的に(または少なくとも効率的に)ポップ/廃棄することができる。

だから私はある種のFIFO優先順位キューを探していると思います。

ご迷惑をおかけして申し訳ございません。

+0

可能な重複[限られたスペースの優先キュー:良いアルゴリズムを探す](http://stackoverflow.com/questions/2933758/priority-queue-with-limitedspace-looking-for-a-good-アルゴリズム) – geekosaur

+0

そのポスターは、「要素は決して並べ替える必要はない」というデータ構造について尋ねていました。私は固定サイズ、FIFOが必要であり、それは常にソートされたままです。 – oracle3001

+0

これは適切ではありませんか?http://msdn.microsoft.com/en-us/library/4ef4dae9.aspx?コンテナのサイズによっては、ベクトルや両端キューを使うだけで、必要に応じて 'sort'、' min'、 'max'関数を' algorithm'関数に適用すると、十分に速くなります。 – EdChum

答えて

5

なぜ、std :: setまたはmultisetと、そのセットにイテレータのstd :: queueのような通常のFIFOキューがないのですか?挿入するたびに、キューが最大サイズより大きくなったかどうかを確認し、キューとセットからフロント要素を削除します。

+0

キューの先頭やポインタのヒープからポップするのが非常に効率的であることがわかります。しかし、要素がバイナリ検索ツリーのどこにあっても、セットからの連続的な削除操作はどれぐらい効率的ですか? – oracle3001

+0

http://www.sgi.com/tech/stl/SortedAssociativeContainer.htmlによると、イテレータを指定して消去すると、O(1)になります。 –

+0

Ok cool ...私は現在、ポインタを格納するためにBoost Circular Bufferを使用すると考えています。 「実行期間」の後、各反復でフロント要素をポップするだけで済みます。 – oracle3001

関連する問題