どのSTLコンテナがパフォーマンスの点で '継続的に'変化する要素のコレクションに最も適しているかを知りたいと思います。これらの要素は、指定された表示空間内のオブジェクトを表し、ビューの変更やオブジェクトの移動や表示の移動に伴い、オブジェクトのコレクションを更新する必要があります。ビューが更新されるたびに、私はUIDでソートされたシーンの中にあるオブジェクトのstd :: vectorを取得します(このリストAを呼び出すことができます)。 Iがthat checkをrunするwant:継続的に追加および削除される一連の要素に使用するコンテナ
がactually sceneでno longer thingsのcurrent listからvisibleあるobjectsをremoves List Aにbased(このListのBをcall)
はnew objectsをadds今Bをリストに表示されていること、再びリストAに基づいて4000個のオブジェクトへ
二つは、おそらく今まで見たオブジェクトの数の上限です。オブジェクトのUIDは数十億に達するので、私はビットマップされたベクトルを使用することはできません。私はリストBを更新するためのリストB.私の提案戦略のためのstd ::マップを使用することができます考えていたことである。「i」はリストBの各UIDに対して
、UIDの検索がIは(リストAにstd :: lower_boundを使用して)。 UIDがリストAに存在しない場合は、リストBから削除します。
リストAの各UIDについて、リストBのUID 'i'を検索します(std :: map :: lower_boundを使用) 。リストBにUIDが存在しない場合は、追加します。
私は、具体的には、適切なコンテナタイプを使用している場合、いくつかのアドバイスをしたいと思います。私はstd :: vectorがリストBのために良い選択になるとは思っていませんでした。なぜなら、挿入/削除は高価なので、私はstd :: findよりもバイナリ検索を使いたければ明示的にソートする必要があったからです。しかし、それ以外のコンテナの種類や、それがより適切かどうかはわかりません。
リストBを更新するために選択した一般的な方法が最も効率的な方法であるかどうかを知りたいと思っています。
はこれがまさにこのセットではありませんか? –
Deos this help? http://stackoverflow.com/questions/471432/in-which-scenario-do-i-use-a-particular-stl-container –
AにないBからすべてを削除し、Bにすべてを追加するとAではあるがBではなく、あなたの結果はAのコピーを作ることとどう違うのですか? –