我正在开发一款游戏,其中一个对象可能存在于(x, y)
wherex
和y
are的位置ints
。例如,一个对象可能存在(0, 0)
也可能不存在,但不可能同时存在多个对象。
我正在尝试决定使用哪个 STL 容器来解决手头的问题以及解决此问题的最佳方法。
基本上,我从一个对象及其(x, y)
位置开始。目标是根据该对象的周围对象确定最高、最大的可能矩形。必须使用当前对象上方和下方的所有对象来创建矩形。也就是说,它必须是可能基于起始对象位置的最高点。
例如,假设以下代表我的对象网格,我从 location 的绿色对象开始(3, 4)
:
然后,我正在寻找的矩形将由下面的粉红色方块表示:
因此,假设我从(3, 4)
示例中所示的对象开始,我将需要检查对象是否也存在于(2, 4)
、(4, 4)
、(3, 3)
和(3, 5)
。如果对象存在于这些位置中的任何一个,我需要重复该过程以使对象找到最大可能的矩形。
这些物品相当稀有,游戏世界很大。new
整个游戏世界只使用一个 2D 数组似乎并不实际,因为大多数元素都是空的。但是,我需要索引到任何位置以随时检查对象是否存在。
相反,我考虑过使用std::map
这样的:
std::map< std::pair<int, int>, ObjectData> m_objects;
然后,当我检查周围的物体时,我可以map::find()
在我的循环中使用,检查周围的物体是否存在:
if(m_objects.find(std::pair<3, 4>) != m_objects.end())
{
//An object exists at (3, 4).
//Add it to the list of surrounding objects.
}
如果我决定这样做,我可能会打很多电话map::find()
,但地图占用的内存比new
ing 整个世界的 2D 数组要少得多。
有人对我可以用来查找所需内容的简单算法有任何建议吗?我应该继续使用 astd::map
还是有更好的容器来解决此类问题?