Вы должны интерпретировать 2D-массив как указатель на указатели и поменять местами указатели начала строки:
#include <algorithm>
int array[8][2];
template<int Rows, int Cols>
void sort(int (&array)[Rows][Cols], int (&order)[Rows]) {
for (int r = 0; r < Rows; ++r) {
std::swap_ranges(&array[r][0], &array[r][Cols], &order[r]);
}
}
int main() {
int order[8] = {7,1,0,2,3,6,5,4};
sort(array, order);
return 0;
}
Переключаясь с указателей на массивы в качестве аргументов функции, вы получаете дополнительное преимущество проверки компилятором, есливаш массив order
содержит столько же элементов, сколько строк в array
.