Как я могу построить приоритетную очередь с C++, которая дает приоритет четному большому числу, а затем маленькому нечетному числу? [закрытый]
Как я могу построить приоритетную очередь с C++, которая дает приоритет четным большим числам, а затем малым нечетным числам?
Например: если я толкаю 4 8 3 2 1
в очередь приоритетов, в очереди приоритетов он становится 8 4 2 1 3
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;
Правка: приоритет оператора.