私のpriority_queueは逆順になっていて、その理由がわかりません。これはcplusplus.comからのものです
comp がこの型のオブジェクトであり、a と b がコンテナー内の要素である式 comp(a,b) は、関数が定義する厳密な弱い順序でa がb の前にあると見なされる場合、 trueを返します。
これで、Comparator のクラス operator() 関数で、a が b よりも小さい場合、a は b の前に移動する必要があります。したがって、a が b より小さい場合は true を返します。しかし、最終的にはシーケンス「321」を取得しますが、代わりに「123」を期待していました!
#include <iostream>
#include <queue>
using namespace std;
class Number{
int x;
public:
Number(int _x):x(_x){}
int getX()const{return x;}
};
class Comparator{
public:
bool operator()(const Number& a,const Number& b){
if (a.getX()<b.getX()){
return true;
} else {
return false;
}
}
};
int main(){
priority_queue<Number,vector<Number>,Comparator> pq;
pq.push(2);
pq.push(1);
pq.push(3);
while (!pq.empty()){
cout<<pq.top().getX();
pq.pop();
}
return 0;
}