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