C++ 优先级队列中的排序

C++ 优先级队列中的排序,c++,C++,我的优先级队列是向后排列的,我不明白为什么。这是从 表达式comp(a,b),其中comp是此类型的对象,a 和b是容器中的元素,如果a为,则应返回true 在函数的严格弱序中,被认为在b之前 定义 现在在我的比较器的class operator()函数中,如果a小于b,那么a应该在b之前。因此,如果a小于b,则返回true。然而,最后我得到了序列“321”,但我排除了“123”而不是 #包括 #包括 使用名称空间std; 班号{ int x; 公众: 数字(int_x):x(x){} int

我的优先级队列是向后排列的,我不明白为什么。这是从

表达式comp(a,b),其中comp是此类型的对象,a 和b是容器中的元素,如果a为,则应返回true 在函数的严格弱序中,被认为在b之前 定义

现在在我的比较器的class operator()函数中,如果a小于b,那么a应该在b之前。因此,如果a小于b,则返回true。然而,最后我得到了序列“321”,但我排除了“123”而不是

#包括
#包括
使用名称空间std;
班号{
int x;
公众:
数字(int_x):x(x){}
int getX()常量{return x;}
};
类比较器{
公众:
布尔运算符()(常数编号和a、常数编号和b){

如果(a.getX()该网站还说:

根据这种严格的弱排序,弹出的元素是最后一个

因此,元素按弱排序的相反顺序弹出。这是因为
priority\u queue
实现了最大堆,即首先弹出最大元素(由弱排序定义)的堆


如果你想实现一个最小堆(一个将元素从最小值弹出到最大值的堆),你需要让你的比较函数做相反的事情,即根据你的顺序返回
true
当且仅当
a>b

该网站还说:

根据这种严格的弱排序,弹出的元素是最后一个

因此,元素按弱排序的相反顺序弹出。这是因为
priority\u queue
实现了最大堆,即首先弹出最大元素(由弱排序定义)的堆


如果要实现最小堆(一个将元素从最小值弹出到最大值的堆),则需要使比较函数执行相反的操作,即当且仅当
a>b
根据您的顺序返回
true

尝试更改
比较器

class Comparator{
public:
    bool operator()(const Number& a,const Number& b){
        if (a.getX()<b.getX()){
            return true;
        } else {
            return false;
        }
    }
};
…这将
比较器类简化为:

class Comparator { 
    bool operator()(Number const &a, Number const &b) { 
        return b < a;
    }
};

尝试更改
比较器

class Comparator{
public:
    bool operator()(const Number& a,const Number& b){
        if (a.getX()<b.getX()){
            return true;
        } else {
            return false;
        }
    }
};
…这将
比较器类简化为:

class Comparator { 
    bool operator()(Number const &a, Number const &b) { 
        return b < a;
    }
};

你知道你可以说
返回a.getX()
对吗?我不知道,谢谢。你知道你可以说
返回a.getX()
对吗?我不知道,谢谢。
class Comparator { 
    bool operator()(Number const &a, Number const &b) { 
        return b < a;
    }
};
priority_queue<Number,vector<Number>, greater<Number> > pq;