STL优先级队列非类类型编译错误

Dae*_*den 2 c++ stl priority-queue

我以为我已经弄清楚了,但是我想我错了。我的印象是,“ <...>”中的第一个元素是要存储在队列中的类型,第二个是容器类型(选择是“ vector”或“ dequeue”),第三个是是重载'()'运算符进行比较的类。基于此,我认为下面的代码应该编译,但不是:(

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);
Run Code Online (Sandbox Code Playgroud)

“ edgeComparator”的定义如下:

class edgeComparator
{
   public:
      bool operator() (const uint32_t*& lhs, const uint32_t*& rhs) const
      {
         return (lhs[1]>rhs[1]);
      }
};
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

./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> ()()'
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,尝试“ 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> ()()'
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 5

你有过:

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();
Run Code Online (Sandbox Code Playgroud)

但是,您应该使用:

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q;
Run Code Online (Sandbox Code Playgroud)

第一个版本声明了一个名为的函数q,该函数不带任何参数,并返回type的值std::priority_queue<...>

第二个版本声明了一个名为,类型为的变量q,该变量std::priority_queue<...>已默认初始化。