C++数据结构以查找多维数组中的相邻值

C++ Data Structure to Find Neighbouring Values in Multidimensional Array

本文关键字:数组 数据结构 查找 C++      更新时间:2023-10-16

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

如果你知道你需要邻居的元素的地址,你能不能做指针算术来找出邻居。例如,如果 p 是元素的位置,则 p-- 是左邻,p++ 是右邻。

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

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

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

如果需要将数据存储在第 [i1][i2]...[in] 个索引中,请存储在以下索引中:

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)]