【发布时间】:2012-11-16 22:53:56
【问题描述】:
我正在尝试使用 Boost 实现一个名为 Node 的类的斐波那契指针堆。
typedef boost::heap::fibonacci_heap<Node*> FibonacciHeap;
typedef FibonacciHeap::handle_type HeapHandle;
到目前为止,一切都很好。但我也想在 Node 类中存储堆元素的句柄。 Boost 特别提到“句柄可以存储在 value_type 中”。 Boost 但是,我不能在类中定义比较运算符,因为堆从不使用它,只比较指针值。
但是定义一个作为模板参数传递给 fibonacci_heap 的比较结构会引入循环依赖:
struct CompareNode : public std::binary_function<Node*, Node*, bool>
{
bool operator()(Node* lhs, Node* rhs) const {
return lhs->getFScore() > rhs->getFScore();
}
};
typedef boost::heap::fibonacci_heap<
Node*,
boost::heap::compare<CompareNode> > FibonacciHeap;
Node 依赖于 HeapHandle,HeapHandle 依赖于 Node。
【问题讨论】:
标签: c++ boost cyclic-dependency