2016-06-22 3 views
0

私はstd::priority_queueを使ってDijkstraのPathfinding Algorithmを実装しようとしています。私の待ち行列はタイプNode*であり、に基づいて優先順位をつけるには、Nodeの中で最小のgScoreから最大のものに優先する必要があります。私はドキュメントを読んだことがありますが、これはどのように達成できるのかまだ分かりません。何か案は?C++のstd :: priority_queueにキー/優先度を追加する方法は?

私はタイプがCONTAINER_TYPEによって何を意味するのか(ベクトル)を理解していない

std::priority_queue<Node*> queue; 

私は非常に任意の助けに感謝!

答えて

1

あなたはコンパレータ機能が必要になります

std::priority_queue<Node*,std::vector<Node*>,cmp); 
+0

素敵で簡単な説明。どうもありがとうございました! – Bojangles

+0

@Bojangles喜んで助けてくれました。もしこれがあなたを答えとして受け入れることができたら助かります。 –

+0

する必要があります: 'bool operator()(const Node * a、const Node * b)const' – Ajay

1

その後()

class cmp 
{ 
    public: 
    bool operator()(const Node *a, const Node *b) const 
    { 
     return (a->gscore) > (b->gscore); 
    } 
}; 

をオーバーロードするクラスを作成することができます。クラスを宣言するのではなく、以下に示す方法で実装する方が良いと思います。

auto comp = [] (Node* a,Node* b) -> bool { return a->gscore < b->gscore; }; 
priority_queue< Node*, std::vector<Node*>, decltype(comp) > foo(comp); 
+0

複雑に見えるが、私はそれを撃つだろう。ありがとうございます – Bojangles

+1

ポインタへの参照はなぜですか?ラムダはノードまたはその内容を変更することは想定されていません – Ajay

関連する問題