1

我有一个项目,其中读取了一个或多个维度的数组,并且对于此项目,我需要能够快速确定给定元素的邻居。我不知道维度会提前,而且我也不知道提前维度的大小。什么是最好的C++数据结构来存储这些数据?一位同事推荐了一组向量的向量。 。但是这似乎难以置信地笨重。用于在多维数组中查找相邻值的C++数据结构

+0

你这是什么意思是邻居? –

+0

如果有一个维度: 索引x有邻居x-1和x + 1 ;;; (x,y)具有相邻(x-1,y),(x + 1,y),(x,y-1),(x,y + 1) 等 – Ingulit

+0

你对程序的输入是什么?我猜数组的维度和数组元素? (如2 * 3和1,2,3,4,5,6)? –

回答

1

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

+0

我明白你在说什么,但我需要弄清楚首先要存储数据的内容,这样类似的东西才是可行的。 – Ingulit

+0

一个数组可以正常工作。 – aligardezi

+0

我刚刚意识到我忘了提及一些东西,所以我会复制我上面评论的内容:数据不在C++数组中;它在一个专有的包装类中,我不得不从中提取数据。 – Ingulit

0

将您的多维数组视为一维数组。让该阵列的尺寸是d1 * d2 * ....* dn

然后,对于一个1D阵列分配内存,说大小d1 * d2 * ....* dnA。例如,

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