2013-09-29 82 views
0

今天,我有一个关于在多维数组中存储对象/结构或其他值的一般问题。C++中的多维数组?

实际情况如下,但我可能需要类似的解决方案在许多其他地方,这就是为什么我想问你最好的做法。

假设我们有侧面滚动游戏。现在我需要以某种二维数组的形式存储关于世界单元格的信息,其中0:0将是原始位置。在比赛开始时,我产生了世界的一小部分,比如从-10:-5到10:5。玩家可以左右移动(有时上下),所以当他到达世界的边缘时,我必须产生更多的世界信息。现在我的问题:我应该如何存储具有不同极值的二维数组?有没有关于如何做到这一点的最佳做法?你会怎么做?

再次感谢您的帮助!

+1

主要是'矢量>'。 – 2013-09-29 18:58:14

+0

@ H2CO3如何理想地跟踪维度?说一点,我的领域从-101:-18延伸到55:12或什么的。如何确定存储单元格0:0的信息? –

+1

使用变量。类型'size_t'或'int'或其他。 '矢量'知道它的大小。 – 2013-09-29 19:04:22

回答

4

不要将它作为数组存储,请使用包含坐标和值的结构。

然后将这些对象存储在更智能的结构中 - deque,list或tree,具体取决于它们需要如何搜索。

+0

很酷,我以前不知道deques,他们听起来很方便。谢谢! –

+0

@LarsEbert如果你打算沿任何方向移动(而不是在1d中滚动),然后看树。 –

+0

好吧,我只是搜索了“树”,我不知道我的期望是什么...但严重的是,我理解(二叉树)的定义,但我不知道如何将这个世界存储在树中。 –

1

解决方案#1:使用1d数组与size == dimension1*dimension2*dimension3*....并仿真多维数组。您将不得不编写自己的调整大小代码(应该很容易)
解决方案#2:使用稀疏数组。 A std::map<Coordinate, Value>会做。
解决方案#3Boost.MultiArray
解决方案#4:不要将世界存储为N维数组。将对象存储为list/deque/whatever,然后使用BSP树,八叉树,扫描和修剪或空间分区来快速定位可见区域中的对象。