2
我試圖實現一個名爲節點使用Boost的類的指針的Fibonacci堆。解決模板中的循環依賴關係
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;
節點取決於HeapHandle和HeapHandle取決於節點。
謝謝,我想我不能見木所有(二進制)樹。 :) – Domderon