Home > Enterprise >  How do I order an array of strings on the basis of an array of integers
How do I order an array of strings on the basis of an array of integers

Time:11-15

I have an array of integers with a bunch of numbers from 1-10 Then I have an array of names(strings) which belong with the numbers a.e.

Numbers[0] = 5, Numbers[1] = 2
Names[0] = "Jeremy", Names [1] = "Samantha".

I can easily order the numbers with:

    int n = sizeof(Numbers) / sizeof(Numbers[0]);
    sort(Numbers, Numbers   n, greater<int>());

But then the names and numbers don't match at all. How do I fix this?

CodePudding user response:

I've tested this code which should give you the required behavior:

struct numberName {
    int num;
    string name;
};

bool compare(numberName a, numberName b){
    return a.num < b.num; // if equal, no need to sort.
}

int main() {
    numberName list[2];
    list[0].num = 5, list[1].num = 2;
    list[0].name = "Jeremy", list[1].name = "Samantha";
    sort(list, list 2, compare);
}

Like HAL9000 said, you want to use a struct since this keeps variables that belong to each other together. Alternatively you could use a pair, but I don't know if a pair would be good practice for your situation or not.

CodePudding user response:

This is a great example of the complexities introduced by using parallel arrays.

If you insist on keeping them as parallel arrays, here is a possible approach. Create a vector of integer indexes, initialised to { 0, 1, 2, 3, etc }. Each integer represents one position in your array. Sort your vector of indexes using a custom comparision function that uses the indexes to refer to array1 (Numbers). When finished you can use the sorted indexes to reorder array1 and array2 (Names).

  • Related