そのため、さまざまな状況でのさまざまな STL コンテナーのパフォーマンス比較について、さまざまな質問、ブログ投稿、記事などを読むのに何時間も費やしてきました。
ただし、正確な状況(3D ゲーム)の適切なソースをまだ見つけることができませんでした。
私はいくつかのクラスへのポインタを多数(間違いなく5k以上、おそらく50k未満)収集しています(正確な性質は関係ないと思います)、任意の位置までの距離を決定する単一のfloat値でそれらをソートしたいこれはフレーム中に変化しません)。
その後、格納された各ポインターを反復処理したいと思います。ここでは順序が重要なので、並べ替えを行います。
擬似コードの状況は次のとおりです。
// A: Insertion
foreach (class instance that needs sorting):
container.insert( pair(distanceOfInstance, instance) );
// B: Sorting - using the distanceOfInstance as the determining factor
container.sort();
// C: Iteration in sorted order
foreach (pair in container)
doSomethingWith(pair.instance);
このプロセス全体がゲームの各フレームで (潜在的に) 繰り返されるため、ここでの最適なパフォーマンスは重要です。コンテナーは、毎回A の前にクリアする必要があります。Cの後、他に何も行われません。
私が必要としないもの (繰り返しますが、必要ありません):
- コンテナへのランダムアクセス。
- コンテナがソートされた後に新しい要素を挿入する機能。
現在、私が最も速いと考えたのは、ベクターまたはセットのいずれかを使用することです。しかし、私の状況では、要素をベクターに挿入して並べ替え、各要素を 1 回反復する方が速いかどうかはわかりません。または、要素をセットに挿入して (挿入中に並べ替えて)、各要素を 1 回反復する方が高速な場合。
私たちのプロジェクトでは、他のいくつかのタスクにもブーストを使用しているため、ブースト内のより良い解決策 (またはまったく別のもの) を誰かが知っている場合は、提案をお待ちしています。また、この質問がすでに回答されていて、見つけられなかった場合は申し訳ありません:)