【问题标题】:C++ STL priority queue of Node Pointers节点指针的 C++ STL 优先级队列
【发布时间】:2011-02-23 00:14:15
【问题描述】:

我正在尝试实现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:错误:一个声明中有多种类型 make: * [astar.o] 错误 1

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

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

【问题讨论】:

    标签: priority-queue


    【解决方案1】:

    之前 Astar 缺少终止符;

    【讨论】:

    • 你在编程中走得越远,最简单的事情总是让你绊倒......谢谢你抓住它!!!
    猜你喜欢
    • 2013-03-16
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多