c++ - 我应该使用什么类型的容器来存储我的 ObjectID 整数?

标签 c++ list vector iteration containers

我觉得这是一个非常简单,几乎是愚蠢的问题。我只是忘记了我应该知道该怎么做。

我有游戏对象,它们存储在通用的 GameObjectManager 中。这些游戏对象有一个 ObjectID,它是一个简单的整数。

我需要能够在基于 2D 图 block 的世界中插入或移除这些游戏对象,其中每个图 block 都包含一个 ObjectID 容器。

这样,我可以抓取一个特定的图 block (例如 Tile[10][10]),然后通过从容器中读取来查看 Tile[10][10] 上的游戏对象。 (例如,“啊,所以 Character#4302 和 Item#123 在 Tile[10][10] 上!”)

现在,每个“Tile”都是 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 并将其从数组中的任何位置删除。

出于这个原因,我正在考虑使用不同的容器。 也许我太累了,但我可以就使用什么容器以及如何删除容器中的特定变量提出一些建议。

例如,GameObject 的 ObjectID 为“422”。 Tile[2][8] 包含一个容器,该容器按顺序具有以下整数:420、421、422、433、486、800。

我有一个函数:RemoveGameObjectFromMap(int ObjectID); 因此,每当我键入 (RemoveGameObjectFromMap(422);

我曾经使用过 MAP 容器,但那是不必要的。根据 cplusplus.com 的说法,Vector 对此不利。

最佳答案

vector 的好坏取决于很多因素。比如每个图 block 有多少个 ID(平均),插入、删除和查找的频率,有多少需要尽量减少内存使用,以及 100 个其他考虑因素。简而言之,没有简单的答案。在这种情况下,std::vector 的明显替代方案是 std::unordered_set(我假设您永远不想在同一 block 中使用相同的 ID一次)。

关于c++ - 我应该使用什么类型的容器来存储我的 ObjectID 整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18837019/

相关文章:

c++ - 如何检查 mxArray 是否具有类类型?

Android Activity 在 4.3 设备上运行缓慢

Javascript/CSS/HTML/Java IDE?

c++ - "Most Important Const"再次

c++ - 在 Qt 中使用 libarchive - 构建错误

c++ - 如何不断从 vector 中删除奇数位置的值,直到只剩下一个?

c++ - 在 C++ 中迭代 vector 并动态更改值

list - 使用 xSTL 将纯文本转换为 html 样式列表,或使用 xslt 根据元素的内容和位置对元素进行分组

Matlab 独特的细胞组合

c++ - 在 2D 中用 3 个给定点计算精确样条。 C++