Структура данных C ++ для поиска соседних значений в многомерном массиве

У меня есть проект, где я читаю в массиве, который имеет 1 или более измерений, и для этого проекта мне нужно иметь возможность быстро определить соседей данного элемента. Я не знаю размерность раньше времени, и я также не знаю размер измерений раньше времени. В какой структуре данных C ++ лучше всего хранить эти данные? Коллега порекомендовал вектор векторов векторов. , ., но это кажется невероятно громоздким.

1

Решение

Если вы знаете адрес того, для какого элемента вам нужны соседи, просто сделайте арифметику с указателями, чтобы узнать соседей. Например, если p — местоположение элемента, то p— — левый сосед, а p ++ — правый сосед.

1

Другие решения

Представьте, что ваш многомерный массив — это одномерный массив. Пусть размерность массива d1 * d2 * ....* dn

Затем выделите память для 1D массив, скажем A размера d1 * d2 * ....* dn, Например,

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

По вопросам рекламы [email protected]