最小

2016-06-20 8 views
0

をPRIORITY_QUEUEソートを行い、私はこのようないくつかの構造体を持っているとしましょう:それは最大ソート最小

priority_queue<point> Q; 

struct point{ 
    int x, y; 
    //constructor 
}; 

その後、私の比較方法:

bool operator < (point a, point b){ 
    if(a.x < b.x) return true; 
    if(a.x == b.x) return a.y < b.y; 
    return false; 
} 

私が作成ベース(最上位の要素はxが最も大きいものなど)。

どうすれば比較方法を変えずに並べ替えることができますか?

bool operator < (point a, point b){ 
    bool b; 
    if(a.x < b.x) b = true; 
    else if(a.x == b.x) b = a.y < b.y; 
    else b = false; 
    return !b; 
} 

をしかし、私が探していることがあるように私は理解する(COS)が優れているの比較を維持し、ちょうどこのように、PRIORITY_QUEUEコンストラクタを変更です(もちろん、私はこのような何かを行うことができます:それは一点が他よりも小さいかどうかを確認することは理にかなっている場合、あなたが、あなたの構造体のためのoperator>を作るべき

答えて

1

まず、私はこれを達成するにはどうすればよい

priority_queue<point, reverse> Q; 

は?、それは1つがあるかどうかをチェックするために理にかなっています別のものよりも大きくなります。単純に引数を逆にして、operator<のmsを返します。

bool operator>(point a, point b) 
{ 
    return b < a; 
} 

あなたが<functional>ヘッダから、std::greaterを用いる逆プライオリティキューを作ることができる、ということしたら。

​​ :あなたは、多くの場合、この種のものを必要とする場合は

std::priority_queue<point, std::vector<point>, std::greater<point>> Q; 

することは、テンプレートの別名を定義するにはそれだけの価値があるかもしれません