Как использовать функцию qsort с парным вектором

у меня есть парный вектор: 30 25 16. Мне нужно отсортировать его по первому числу в ячейках, при этом - в сортировке когда меняются местами первые элементы из ячеек, с ними должны поменяться местами и вторые элементы. То есть должно получиться: 16 25 30. Я отсортировал по 3, 2 и 1, а 0, 5 и 6 просто перешли вместе с первыми числами. Мне нужно отсортировать с помощью функции qsort. Однако не получается. Скорее всего, я неправильный компаратор создал. Однако я не знаю как его нужно создавать для парного вектора.

#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;

int compare(const void *a, const void *b) {
    const int* x = (int*)a;
    const int* y = (int*)b;

    if (*x > *y) {
        return 1;
    }
    else if (*x < *y) {
        return -1;
    }

    return 0;
}


int main() {

    int m = 3;

    vector<pair<int, int>> weight(m);

    weight[0].first = 3;
    weight[0].second = 0;

    weight[1].first = 2;
    weight[1].second = 5;

    weight[2].first = 1;
    weight[2].second = 6;



    qsort(&weight[0].first, m, sizeof(int), compare);

    for (int i = 0; i < m; i++) {
        cout << weight[i].first << " " << weight[i].second << " ";
    }



    return 0;
}

Ответы (1 шт):

Автор решения: Harry
int compare(const void *a, const void *b) {
    int x = ((pair<int,int>*)a)->first;
    int y = ((pair<int,int>*)b)->first;
    return x - y;
}

а также

qsort(&weight[0].first, m, sizeof(weight[0]), compare);

Voilà!

И все же - qsort как-то не очень годится для сортировки вещей, которые внезапно могут оказаться не POD... Да, в этом конкретном случае все работает, но это, по большому счету, просто везение :)

→ Ссылка