【问题标题】:C++ Data Structure to Find Neighbouring Values in Multidimensional Array在多维数组中查找相邻值的 C++ 数据结构
【发布时间】:2013-09-27 15:29:02
【问题描述】:

我有一个项目,我在其中读取具有 1 个或多个维度的数组,对于这个项目,我需要能够快速确定给定元素的邻居。我不提前知道维度,我同样不提前知道维度的大小。存储这些数据的最佳 C++ 数据结构是什么?一位同事推荐了一个向量的向量。 . .,但这似乎非常笨拙。

【问题讨论】:

  • 邻居是什么意思?
  • 如果只有一维:索引 x 有邻居 x-1 和 x+1 ;;;二维:索引 (x,y) 有邻居 (x-1,y)、(x+1,y)、(x,y-1)、(x,y+1) 等
  • 您对程序的输入是什么?我猜数组的维度和数组元素? (如2*3和1、2、3、4、5、6)?
  • 是的,除非数据不在 C++ 数组中;它在一个专有的包装类中,我必须从中提取数据。
  • 您只想要正交邻居? (即在二维情况下,最多有 4 个)还是您想要“完整邻域”,二维情况下最多可以有 8 个邻居?

标签: c++ arrays data-structures multidimensional-array neighbours


【解决方案1】:

如果您知道需要邻居的元素的地址,您是否可以通过指针运算来找出邻居。例如,如果 p 是元素的位置,则 p-- 是左邻居,p++ 是右邻居。

【讨论】:

  • 我明白你在说什么,但我需要首先弄清楚将数据存储在什么位置,这样这样的事情才可行。
  • 我刚刚意识到我忘了提一些东西,所以我将复制我上面评论的内容:数据不在 C++ 数组中;它在一个专有的包装类中,我必须从中提取数据。
  • 所以我想接下来要问的问题是,在决定结构之前,您需要从 Wrapper 类中维护什么样的信息。
  • 因为如果您需要根据键查找某些内容,那么地图会更适合您。
【解决方案2】:

将您的多维数组视为一维数组。设数组的维度为d1 * d2 * ....* dn

然后为 1D 数组分配内存,例如A,大小为d1 * d2 * ....* dn。例如,

int *A = new int[d1 * d2 * ....* dn];

如果您需要将数据存储在[i1][i2]...[in] th 索引中,则存储在以下索引中:

A[i1 * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + in] 

相邻元素将是:

A[(i1 + 1) * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + in] 
A[(i1 - 1) * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + in] 

A[i1 * (d2*d3*d4.. *dn) + (i2 + 1) * (d3*d4*....dn) + ..... + in] 
A[i1 * (d2*d3*d4.. *dn) + (i2 - 1) * (d3*d4*....dn) + ..... + in] 

.............................
A[i1 * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + (in + 1)] 
A[i1 * (d2*d3*d4.. *dn) + i2 * (d3*d4*....dn) + ..... + (in - 1)] 

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 2019-10-18
    • 2016-01-31
    • 1970-01-01
    • 2010-10-14
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多