priority-queue - 节点指针的C++ STL优先级队列

标签 priority-queue

我正在尝试实现 Node* 的优先级队列,其中 Node 是我自己定义的一个类。我意识到拥有一个优先级的指针队列意味着它会根据地址而不是节点持有的值进行排序,所以我搜索了很多讨论论坛来找到一个解决方案,让我指定如何对优先级队列中的 Node 对象进行排序;大多数人都同意您需要编写一个包含函数的结构,该函数将 2 个 Node 对象作为参数并返回所需的比较。以下是我的 Node 类(缩写)和我为比较 2 个 Node 对象而编写的结构,它们在同一个头文件中:

class Node {

public:

  ...

  int fValue() const { cerr << fValue() << endl; return c + h; };

  ...

private:
  ...
  int c;
  int h;

  ...
};                                                                                             

struct CompareNode : public std::binary_function<Node*, Node*, bool>                                                                                     
{
  bool operator()(const Node* lhs, const Node* rhs) const
  {
    return lhs->fValue() < rhs->fValue();
  }
}

我将优先级队列构造为不同头文件中另一个类的成员,该头文件包含包含上述定义的头文件。这个类缩写如下:
class Astar {

public:

  ...

private:

  ...
  priority_queue<Node*, vector<Node*>, CompareNode> frontier;
};

当我尝试编译时,出现此错误:

astar.h:28: 错误:一个声明中有多种类型
制作:* [astar.o] 错误 1

其中 astar.h 的第 28 行对应于 Astar 类的结尾 ( }; )。

由于这是大多数论坛上提供的解决方案,我不明白这里发生了什么。有没有人对我有任何见解?

最佳答案

Astar 之前的类缺少终止;

关于priority-queue - 节点指针的C++ STL优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085650/

相关文章:

c++ - std::priority_queue 中的比较器

Java 优先级队列中的并发修改异常

java - Java 标准集合中的最大优先级队列。有吗?

Java + Eclipse : The method computeIfAbsent(String, (<no type> k) -> {}) 未定义该类型

java - 给定一个输入数组和求和,返回求和所需的最少元素

java - 更新元素后重新堆化 java.util.PriorityQueue

java - 使用的数据结构 : need to access both by priority and name

java - 删除函数如何处理包含字符串值的最小优先级队列?

c++ - std::priority_queue 中 std::greater 的行为是什么?

java - 打印使用优先级队列排序的 HashMap 实例