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)
你有过:
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<...>已默认初始化。
| 归档时间: |
|
| 查看次数: |
1987 次 |
| 最近记录: |