Сортировать 2D массив с помощью указателей - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть двумерный массив в [8] [2]. Я хочу отсортировать строки, используя порядок, указанный в другом массиве. Order [8] = {7,1,0,2,3,6,5,4}.Я пробовал это, но не работает.

int result[8][2];
void Rearrange_Vector(int* a,int* order)
{
  int temp;
  int ii =0;
  for ( ii=0;ii<8;ii++)
  {
    temp = *Order;
    result[ii][0]  = *(a + temp*sizeof(int));
    Order++;
  }

Любая помощь?

1 Ответ

0 голосов
/ 01 декабря 2018

Вы должны интерпретировать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...