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

标签 c++ stl priority-queue

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

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> ()()'

最佳答案

你有:

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q();

但是,您应该使用:

std::priority_queue<uint32_t*, std::vector<uint32_t*>, edgeComparator> q;

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

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

关于c++ - STL优先级队列非类类型编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437533/

相关文章:

c++ - 合并两个 std::queue

c# - 混合预计算和延迟加载

java - 具有比较器实现的Java PriorityQueue不会返回字符串的相反顺序

c++ - 从 priority_queue 弹出时出现排序问题,这是 std::priority_queue 的错误吗

c++ - 什么是 iota_n 的良好实现(STL 中缺少算法)

c++ - 当模板化类实例在另一个类中用作成员变量时,期望类型说明符

c++ - 从字符串中标记/提取信息的最佳方法

C++ 如何加快算法 - 使用字符串

c++ - 在初始化对象之前在对象上运行的方法?

c++ - 将函数引用传递给该函数内部的结构