小编Mel*_*ssa的帖子

Node Pointers的C++ STL优先级队列

我正在尝试实现一个优先级队列Node*,其中Node是我自己定义的类.我意识到拥有指针的优先级队列意味着它将根据地址而不是Node所持有的值进行排序,因此我搜索了很多讨论论坛以找到一个允许我指定方法的解决方案对优先级队列中的Node对象进行排序; 大多数人都同意你需要编写一个包含一个函数的结构,该函数将参数作为参数2节点对象并返回所需的比较.以下是我的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();
  }
}
Run Code Online (Sandbox Code Playgroud)

我将优先级队列构造为另一个类的成员,该头文件包含包含上述定义的头文件.该类缩写如下:

class Astar {

public:

  ...

private:

  ...
  priority_queue<Node*, vector<Node*>, CompareNode> frontier;
};
Run Code Online (Sandbox Code Playgroud)

当我尝试编译时,我收到此错误:

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

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

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

priority-queue

6
推荐指数
1
解决办法
4115
查看次数

请问istream :: get()没有参数返回空格?

这似乎是一个非常简单的问题,但我无法在任何地方找到答案.如果我正在逐个字符地解析文件(包括换行符),请使用

char next = file.get();
Run Code Online (Sandbox Code Playgroud)

以下检查是否真实?

if (next == '\n')
Run Code Online (Sandbox Code Playgroud)

c++ whitespace istream

2
推荐指数
1
解决办法
133
查看次数

标签 统计

c++ ×1

istream ×1

priority-queue ×1

whitespace ×1