爲了更多地瞭解堆,我實現了我自己的MaxHeap類。我已經測試過它,它工作正常。現在,我想創建一個MinHeap。唯一不同的是(MaxHeap和MinHeap)只是比較(即將<更改爲> =)。那麼,我如何重新設計我的班級以便同時工作?我想到的是,在創建對象時傳遞了比較函數。這是最好的方法嗎?如果是這樣,我該如何去做呢?我甚至不知道正確的關鍵字來搜索我正在尋找的東西。請解釋這樣的課程的設計,並指出我的一些教程。謝謝!如何創建一個接受比較器的類(用於Max Heap和Min Heap)?
2
A
回答
4
不要作爲標準庫確實做出比較模板參數:
template <typename T, typename SWOComp = std::less<T>>
class MyHeap
{
SWOComp compare;
public:
explicit MyHeap(SWOComp c = SWOComp()) : compare(c) { }
// ...
};
然後,當你需要比較兩個元素a
和b
,使用compare(a, b)
。
要實例化一個普通的,<
-有序的類型,說一些MyHeap<int>
。要使用反向排序,請說MyHeap<double, std::greater<double>>
。等等。
不要擔心額外的成員對象;通過空基類優化,這對於無狀態比較器來說不會花費任何代價。
+0
我實現了它,它工作完美。謝謝! – Vinay 2012-01-11 05:05:35
相關問題
- 1. 爲什麼std :: priority_queue使用max heap而不是min heap?
- 2. 在Python中構建MIN-HEAP
- 3. min-heap with zero based array C++
- 4. 將項目插入Max Heap
- 5. 在C使用數組實現Min Heap?
- 6. 如果主要比較恰好相等,如何修改Min Heap插入和刪除功能以接受第二個比較?
- 7. Min Heap Extract 2最小元素
- 8. Max Heap未按預期工作
- 9. android中的dalvik heap和native heap有什麼區別?哪一個是固定的?
- 10. native heap usage android
- 11. d-heap刪除算法
- 12. 如何修改max-heap中的值的優先級?
- 13. iPad Mini Heap Size
- 14. Min heap是,但它是python中定義的最大堆模塊?
- 15. 如何在不遞歸的情況下編寫Max Heap代碼
- 16. Visual C++/HEAP鏈接器選項
- 17. Liquibase error java heap space
- 18. 如何用比較器創建類?
- 19. Binary Heap vs(new)B-Heap:應該在CLR/.NET中實現嗎?
- 20. 如何從谷歌創建的.heap文件生成圖HEAPPROFILER
- 21. 如何用四個2位比較器創建一個8位比較器?
- 22. Python內置堆(heapq):奇數行爲如果被反轉(max-heap)
- 23. VirtualAlloc/VirtualFree vs Heap函數
- 24. 在STL Heap和std :: find中比較std :: shared_ptr的值。 (試圖實現A *)
- 25. 如何確保(像一個試圖終於)銷燬一個HEAP ALLOCATED對象
- 26. 證明使用min-heap合併k個排序列表的算法
- 27. boost :: heap :: arity,它是什麼?
- 28. OpenCV的HOGDescriptor HEAP崩潰
- 29. 爲什麼BUILD-MAX-HEAP花費O(nlgn)時間O(n)而HEAP-SORT花費O(nlgn)時間?
- 30. SQLite的MIN()和MAX()的字符串(memcmp比較)
'> ='不是一個嚴格的弱排序。 – 2012-01-11 03:44:31