Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sorting two corresponding arrays

Tags:

c++

arrays

I have this code here that has two arrays. It sorts arr[], so that the highest value will be in index 0. Now the second array arr1[] contains strings, I'd like the code to apply whatever changes where made to arr[] to arr1[]. So that arr[0] would return 6, while arr1[0] would return the string "d1". Notice how "d1" was at the same index as 6? After sorting I'd like the same values to still have their string counterparts.

How would I go about doing this?

#include <iostream> #include <iomanip> #include <algorithm> #include <functional> using namespace std;  int main() {   int arr[ 5 ] = { 4, 1, 3, 6, 2 };     string arr1[ 5 ] = { "a1", "b1", "c1", "d1", "e1" };    std::sort( arr, arr + 5, std::greater< int >() );   cout << arr[0] << arr1[0] << endl;    system("pause"); } 
like image 497
rectangletangle Avatar asked Oct 11 '10 19:10

rectangletangle


People also ask

How do you sort two arrays parallel?

Arrays package that use the JSR 166 Fork/Join parallelism common pool to provide sorting of arrays in parallel. The methods are called parallelSort() and are overloaded for all the primitive data types and Comparable objects. The following table contains Arrays overloaded sorting methods.


1 Answers

Rather than sort the arrays, sort the indices. I.e., you have

int arr[5]={4,1,3,6,2} string arr1[5]={"a1","b1","c1","d1","e1"}; 

and you make

int indices[5]={0,1,2,3,4}; 

now you make a sort indices comparator that looks like this (just and idea, you'll probably have to fix it a little)

class sort_indices {    private:      int* mparr;    public:      sort_indices(int* parr) : mparr(parr) {}      bool operator()(int i, int j) const { return mparr[i]<mparr[j]; } } 

now you can use the stl sort

std::sort(indices, indices+5, sort_indices(arr)); 

when you're done, the indices array will be such that arr[indices[0]] is the first element. and likewise arr1[indices[0]] is the corresponding pair.

This is also a very useful trick when you're trying to sort a large data object, you don't need to move the data around at every swap, just the indices.

like image 169
miked Avatar answered Sep 18 '22 21:09

miked