(カスタム)priority_queue参照を渡すことができません。優先度キューはラムダを使用してカスタマイズされました。回避策はありますか?私は、Functorとそのすべてを使ってみましたが、priority_queueコンストラクタがソートメソッドを受け入れないさまざまな問題のコンパイルステップに失敗することなく、priority_queueの作成で過去の行を進めることはできませんでした。私はそれがラムダに到達することはできませんまたはヘッダーのいくつかの特別な型宣言が必要だと思うが、私はそれを把握することはできません参照によるカスタムプライオリティキューの受け渡し
ここに私のコードの単純化バージョンです。ここで
#include <queue>
#include <memory>
struct Node
{
int full_dist,
dist1,
dist2;
Node(int d1, int d2) { full_dist = d1 + d2; }
};
void some_processing(std::priority_queue<std::shared_ptr<Node>>& nodes)
{
//something being done with the queue
}
int main()
{
auto comp = [] (const std::shared_ptr<Node>& l, const std::shared_ptr<Node> r) -> bool
{ return l->full_dist > r->full_dist; };
std::priority_queue<std::shared_ptr<Node>, std::vector<std::shared_ptr<Node>>, decltype(comp)> nodes(comp);
some_processing(nodes);//breaks here
}
は、私は、この例で持っているエラーです:
test.cpp:24:24: error: invalid initialization of reference of type ‘std::priority_queue<std::shared_ptr<Node> >&’
from expression of type ‘std::priority_queue<std::shared_ptr<Node>, std::vector<std::shared_ptr<Node>, std::allocator<std::shared_ptr<Node> > >, main()::__lambda0>’
some_processing(nodes);
ありがとう、それは多くを説明します – Liza