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");
}
Rather than sort the arrays, sort the indices. I.e., you have
and you make
now you make a sort indices comparator that looks like this (just and idea, you’ll probably have to fix it a little)
now you can use the stl sort
when you’re done, the indices array will be such that
arr[indices[0]]is the first element. and likewisearr1[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.