[英]What type of container should I use to store my ObjectID integer?
我覺得這是一個非常簡單,幾乎是愚蠢的問題。 我只是忘記了我應該知道該怎么做。
我有GameObjects,它們存儲在通用的GameObjectManager中。 這些GameObject具有一個ObjectID,它是一個簡單的int。
我需要能夠在基於2D切片的世界中插入或刪除這些GameObject,其中每個TILE都包含一個ObjectID的容器。
這樣,我可以抓取特定的圖塊(例如Tile [10] [10]),然后通過從容器中讀取內容來查看Tile [10] [10]上有哪些GameObject。 (例如,“啊,所以Character#4302和Item#123在Tile [10] [10]上!”)
現在,每個“平鋪”都是MAP的Tiles數組中的結構。
struct MapTile
{
std::vector <int> GameObject_MapList ; //list of Objects on this map location
TileTerrainType tileTerrainType; //GFX to display Grass, Sand, Water, Swamp, etc.
};
MapTile mlMap[100][100]; //map array
但是,我讀到,在任意添加/刪除變量時不應使用Vector。 並不是我將刪除數組中的第一個或最后一個變量。 相反,我將必須調用特定的ObjectID並將其從數組中的任何位置刪除。
因此,我正在考慮使用其他容器。 也許我太累了,但是我可以對要使用的容器以及如何刪除容器中的SPECIFIC變量使用一些建議。
例如,GameObject的對象ID為“ 422”。 Tile [2] [8]保存的容器按順序具有以下整數:420、421、422、433、486、800。
我有一個函數:RemoveGameObjectFromMap(int ObjectID); 因此,每當我鍵入(RemoveGameObjectFromMap(422);
我曾經使用過MAP容器,但這是不必要的。 根據cplusplus.com的Vector,這樣做是不利的。
向量的好壞取決於許多因素。 像每個圖塊有多少個ID(平均),插入,刪除和查找的頻率如何,有多少需求以最小化內存使用,以及其他100個注意事項。 簡而言之,沒有簡單的答案。 在這種情況下,顯然可以替代std::vector
方法是std::unordered_set
(我假設您永遠不會希望同一圖塊中的同一ID超過一次)。
如果要存儲10-20個元素,請使用vector。 特別是對於POD元素。 我不確定std::unordered_set
但是map將為您提供大量內存分配,這將吞噬快速插入和擦除帶來的任何速度提升。 為了加快搜索速度,您可以對向量進行排序,並使用一些二進制搜索( lower_bound upper_bound equal_range )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.