#include <iostream>
#include <vector>
#include <queue>
#include <functional>

typedef std::pair<int, int> parInts;

bool comparador (parInts ponto1, parInts ponto2){
    if (ponto1.first == ponto2.first){
        return ponto1.second > ponto2.second;
    }
    else {
        return ponto1.first > ponto2.first;
    }
}

int main () {
    std::priority_queue<parInts, std::vector<parInts>, std::function<bool(parInts, parInts)>> fila(comparador);

    fila.push(std::make_pair(5, 1));
    fila.push(std::make_pair(3, 2));
    fila.push(std::make_pair(6, 3));
    fila.push(std::make_pair(3, 4));

    while (!fila.empty()){
        std::pair<int, int> ponto = fila.top();
        std::cout << ponto.first << " " << ponto.second << std::endl;
        fila.pop();
    }

    return 0;
}
