2次元座標(符号付き近距離)で識別される項目の数があります。すべてのアイテムは、64KBのデータを含むクラスです。いつでも500〜1500程度のアイテムがあります。アイテムは、通常、1点を中心に〜20のグループです。私の質問は、あまりにも多くのメモリを取らないようにマップする必要があります。アイテムはゆっくりと追加/削除され(1秒あたり1〜10)、非常に頻繁にフェッチされるため、リストから要素を取り出す(より大きな構造へのポインタ)可能な限り速くする必要があります。私が思い付いた何2次元空間の項目をメモリにマッピングする
は、64×64のポインタの四角形を格納します言うことができますし、いくつかのgridContainerクラスがあるだろうということです。私は他のgridContainerを格納するメインのグリッドコンテナを持ち、このネストされたgridContainerはマップしたい実際のアイテムを格納します(これは4096x4096の実際のアイテムを許可します)。例えば[260,130]のような特定の項目にアクセスするには、それを64で割って商を取って親のgridContainer位置を見つけ、残りを入れ子のgridContainer位置を見つけます。ですから、[270,145]では[4,2]と[14,17]があります。
私はまた、STLのマップを使用して考えていたが、私はそれの内部を知らないと私はそれを期待すべきかパフォーマンスか分かりません。
私の方法上の任意の提案やそれを行うための任意のより良い方法はありますか?
あなたはいつもこれがlog(n)
時に検索して追加することが可能になる
std::map<std::pair<short, short>, *item>
を使用することができますが、より正確な答えを私たちはあなたが
Quad Treeは、あなたが探しているもののようです
「リストから項目を速く取得する」とはどういう意味ですか? – lezebulon
この[ウィキペディアの記事](http://en.wikipedia.org/wiki/Spatial_index)では、あなたの仕事にさまざまなバリエーションがあります。 –
@lezebulonできるだけ早くアイテム(リストに格納されているアイテムへのポインタ)をフェッチできるようにしたい。 – Sebi