私はこれを理解したと思っていましたが、間違っていたと思います。'<...>' の最初の要素はキューに格納される型で、2 番目はコンテナーの型 (選択肢は 'vector' または 'dequeue') であり、3 番目の要素は次のような印象を受けました。比較のために「()」演算子をオーバーロードするクラスです。これに基づいて、次のコードはコンパイルする必要があると思いますが、コンパイルしません:(
std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();
uint32_t* nodeEdge = new uint32_t[2];
nodeEdge[0] = startN;
nodeEdge[1] = 0;
q.push(nodeEdge);
「edgeComparator」は次のように定義されます。
class edgeComparator
{
public:
bool operator() (const uint32_t*& lhs, const uint32_t*& rhs) const
{
return (lhs[1]>rhs[1]);
}
};
ここに私が得ているエラーがあります:
./Graph.cpp: In member function `void Graph::findShortestPath()':
./Graph.cpp:148: error: request for member `push' in `q', which is of non-class type `std::priority_queue<uint32_t*, std::vector<uint32_t*, std::allocator<uint32_t*> >, edgeComparator> ()()'
さらに悪いことに、「q.empty()」を試したときにもこのエラーが発生します
./Graph.cpp:150: error: request for member `empty' in `q', which is of non-class type `std::priority_queue<uint32_t*, std::vector<uint32_t*, std::allocator<uint32_t*> >, edgeComparator> ()()'