Как я могу построить приоритетную очередь с C++, которая дает приоритет четному большому числу, а затем маленькому нечетному числу? [закрытый]


Как я могу построить приоритетную очередь с C++, которая дает приоритет четным большим числам, а затем малым нечетным числам?

Например: если я толкаю 4 8 3 2 1 в очередь приоритетов, в очереди приоритетов он становится 8 4 2 1 3

2 2

2 ответа:

struct greater_even_first{
    bool operator()(int a, int b) const{
        if(a%2==0){
            if(b%2)
                return true;
            else
                return a>b;
        }
        else if(b%2==0)
            return false;
        return b>a;
    }
};

#include<queue>
std::priority_queue<int, std::vector<int>, greater_even_first> name;

greater_even_first может быть, шаблон станет более универсальным.

Если вы хотите знать, как это работает, прочитайте priority_queue's документация .

Можно использовать std::priority_queue и пользовательский компаратор.

template<class T>
struct your_comparator {
    bool operator()(const T& lhs, const T& rhs) const {
        if((lhs & 1) == 0 && (rhs & 1) == 0)
            return lhs < rhs;
        else if((lhs & 1) == 1 && (rhs & 1) == 0)
            return true;
        else if((lhs & 1) == 1 && (rhs & 1) == 1)
            return rhs < lhs;
        else
            return false;
    }
}

...

std::priority_queue<int, std::vector<int>, your_comparator<int>> your_pqueue;

Правка: приоритет оператора.