簡體   English   中英

我應該使用哪種類型的容器存儲ObjectID整數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM