如何使用C ++构建优先级队列,优先考虑大数字,然后是小数字?
例如:如果我将4 8 3 2 1
推入优先级队列,则优先级队列中的8 4 2 1 3
答案 0 :(得分:5)
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 documentation。
答案 1 :(得分:2)
您可以使用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;
编辑:运算符优先级。