ゲーム エンジンの一部を研究していて、一部を最適化する方法を考えています。
状況は非常に単純で、次のとおりです。
- s のマップがあります
Tile
(2 次元配列に格納されています) (~260k タイルですが、それ以上の数を想定しています) Item
私は常に少なくとも 1 つのタイルと最大 1 つのタイルにある のリストを持っています- A
Tile
は論理的に無限の量のItem
sを含むことができます - ゲームの実行中、多く
Item
の が継続的に作成され、それらは独自のものから始まりますTile
- 連続
Item
的Tile
に隣接するもの (上、右、下、左) のいずれかに変化します。
これまで、 everyItem
には実際の への参照がありTile
、アイテムのリストを保持しているだけです。Item
隣接するタイルに移動するたびに、更新するだけitem->tile = ..
で問題ありません。これは正常に機能しますが、単方向です。
エンジンを拡張しているときに、タイルに含まれるすべてのアイテムを何度も検索する必要があり、これが事実上パフォーマンスを低下させていることに気付きました (特に、一連のタイルのすべてのアイテムを 1 つずつ検索する必要がある場合)。 .
これは、 O(n)Tile
よりも優れた特定のすべてのアイテムを見つけるのに適したデータ構造を見つけたいことを意味しますが、「あるタイルから別のタイルに移動する」フェーズでのオーバーヘッドを大幅に回避したいと考えています (現在は単にポインターを割り当てる場合、非常に頻繁に行われるため、そこで多くの操作を行うことは避けたいと思います)。
アイテムが常に隣のセルに移動するという事実を利用するためのカスタム データ構造について考えていますが、現在暗闇の中で手探り中です! トリッキーなアプローチや不可解なアプローチであっても、アドバイスをいただければ幸いです。残念ながら、メモリを無駄にすることはできないため、適切なトレードオフが必要です。
STLを使用してC++で開発していますが、Boostは使用していません。(はい、私は知っていますmultimap
、それは私を満足させませんが、他に良いものが見つからない場合は試してみます)