Ordered_uniqueインデックスを持つブーストmulti_indexコンテナから中央値をすばやく取得したいのですが、インデックスイテレータはランダムアクセスではありません(これはstd :: setと一致していますが、なぜできないのかわかりません) ...)。
イテレータcontainer.size()/ 2倍をインクリメントする以外に、これを行うためのより高速で適切な方法はありますか?
Ordered_uniqueインデックスを持つブーストmulti_indexコンテナから中央値をすばやく取得したいのですが、インデックスイテレータはランダムアクセスではありません(これはstd :: setと一致していますが、なぜできないのかわかりません) ...)。
イテレータcontainer.size()/ 2倍をインクリメントする以外に、これを行うためのより高速で適切な方法はありますか?
Boost.MultiIndexはランダムアクセスインデックスを提供しますが、これらのインデックスは順序を直接処理しません。ただし、新しい要素を挿入した後、メンバーの並べ替え関数を使用してこれらのインデックスを並べ替えることができるため、中央値を効率的に取得できます。
Boost.MultiIndexにリクエストを送信して、注文を直接使用して挿入を実行できるようにする必要があるようです。これは、はるかに効率的であるためです。
私は別の状況で同じ問題に遭遇しました。STLとBoostは、順序付けを利用するためのランダムアクセス(比較など)を持つ順序付けされたコンテナーを提供していないようです。
私の(それほどきれいではない)解決策は、入力を実行し、それをセットで「フィルタリング」するクラスを使用することでした。入力操作が終了した後、セットのすべてのイテレータをベクトルにコピーし、これをランダムアクセスに使用しました。
このソリューションは、非常に限られたコンテキストでのみ機能します。コンテナに対して入力を1回実行します。add to the containerを再度変更すると、すべてのイテレーターを再度コピーする必要があります。使うのは本当に不器用でしたが、うまくいきました。