I have a vector of tuples which I want to sort first w.r.t. 1st value, then w.r.t. 2nd value.
Here is the code used:
#include <bits/stdc++.h>
using namespace std;
bool mysort(const tuple<int, int, int>& a, const tuple<int, int, int>& b) {
    if (get<0>(a) < get<0>(b)) {
        if (get<1>(a) > get<1>(b)) return false;
        else return true;
    }
    else return false;
}
int main() {
    vector<tuple<int, int, int>> queries;
    int n;
    cin >> n;
    for(int i = 0; i<n; i++) {
        int l, r, c;
        cin >> l >> r;
        queries.push_back(make_tuple(l, r, i));
    }
    sort(queries.begin(), queries.end(), mysort);
    // print sorted queries
    for (int i = 0; i < queries.size(); i++) {
        cout << get<0>(queries[i]) << ", " << get<1>(queries[i]) << endl;
    }
    return 0;
}
Input used:
6
1 2
1 5
1 3
2 8
3 3
5 8
Output from above code:
1, 2
1, 5
1, 3
2, 8
3, 3
5, 8
Expected sorted output is:
1, 2
1, 3
1, 5
2, 8
3, 3
5, 8
Issue reproducible link: https://ideone.com/4iVJuD
 
    