如何使用C ++构建优先级队列,优先级为大数,然后优先级为小奇数?

时间:2014-09-04 18:40:45

标签: c++ data-structures computer-science

如何使用C ++构建优先级队列,优先考虑大数字,然后是小数字?

例如:如果我将4 8 3 2 1推入优先级队列,则优先级队列中的8 4 2 1 3

2 个答案:

答案 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;

编辑:运算符优先级。