2012-01-11 50 views
2

爲了更多地瞭解堆,我實現了我自己的MaxHeap類。我已經測試過它,它工作正常。現在,我想創建一個MinHeap。唯一不同的是(MaxHeap和MinHeap)只是比較(即將<更改爲> =)。那麼,我如何重新設計我的班級以便同時工作?我想到的是,在創建對象時傳遞了比較函數。這是最好的方法嗎?如果是這樣,我該如何去做呢?我甚至不知道正確的關鍵字來搜索我正在尋找的東西。請解釋這樣的課程的設計,並指出我的一些教程。謝謝!如何創建一個接受比較器的類(用於Max Heap和Min Heap)?

+0

'> ='不是一個嚴格的弱排序。 – 2012-01-11 03:44:31

回答

4

不要作爲標準庫確實做出比較模板參數:

template <typename T, typename SWOComp = std::less<T>> 
class MyHeap 
{ 
    SWOComp compare; 
public: 
    explicit MyHeap(SWOComp c = SWOComp()) : compare(c) { } 
    // ... 
}; 

然後,當你需要比較兩個元素ab,使用compare(a, b)

要實例化一個普通的,<-有序的類型,說一些MyHeap<int>。要使用反向排序,請說MyHeap<double, std::greater<double>>。等等。

不要擔心額外的成員對象;通過空基類優化,這對於無狀態比較器來說不會花費任何代價。

+0

我實現了它,它工作完美。謝謝! – Vinay 2012-01-11 05:05:35

相關問題