Sorting multidimensional array and keeping index C ++

Is it possible to sort a multidimensional array (line by line) using sorting in C ++ so that I can store the index?

For example,

13, 14, 5, 16
0, 4, 3, 2
7, 3, 7, 6
9, 1, 11, 12

      

becomes:

{ 5,13,14,16}
{ 0,2,3,4 }
{ 3,6,7,7}
{ 1,9,11,12 } 

      

And the array with index will be:

{2,0,1,3}
{0,3,2,1}
{1,3,0,2}
{ 1,0,2,3}

      

+3


source to share


2 answers


First, create an array of integer indices; here it is for a 1D array:

int ind[arr.size()];
for( int i=0; i<arr.size(); ++i)
    ind[i] = i;

      

Then create a comparison object. Here's a rough example of this in C ++ 99 lingo; for C ++ 11, you can shorten this using lambda:

struct compare
{
    bool operator()( int left, int right ) {
        return arr[left] < arr[right];
    }
};

      



Sorting an array of indices using this functor:

std::sort( ind, ind+sizeof(arr), compare );

      

Finally, use a sorted index array to order the array of values.

+2


source


Yes. To sort line by line, you must set the appropriate start and end points in the function sort

. To keep the index part, you can first create pairs of array and index elements using the command make_pair

. After executing the above code, you can restore the index array.

You will need to do something like this (I haven't tried it yet):



for (i = 0; i < matrix.size(); i++)
{
  sort(matrix[i].begin(), matrix[i].end());
}

      

Remember to add the index as the second element in a pair, because by default the pair comparison operator checks the first element followed by the second element.

0


source







All Articles