我正在爲二叉搜索樹編寫STL類容器。我有Tree本身和嵌套類TreeNode的模板類。
我的問題是我應該在哪裏放置比較鍵的二元謂詞函數 - 進入樹類還是進入Node類?如果我決定把它放在Tree類中,我的所有節點都不知道如何比較它們的鍵值:(
而且如果在一個Node類中,我應該使這個函數是否爲靜態的?BST實現的一個小問題
1
A
回答
1
比較應該在節點內部存儲的值之間,而不是節點本身之間,因此你不需要在任何一個建議的地方都有一個比較器,你可以將比較器類作爲treee(和節點)的模板參數,或者只是當你比較節點中的值時,依靠默認值工作。
1
很明顯,你不能使它成爲靜態的 - 如果你這樣做了,那麼具有兩種不同比較函數的兩棵不同的樹就不能工作以後會覆蓋全球)。同樣清楚的是,它不應該是每個節點 - 你會複製完全相同的功能,每個節點有一個內存命中,無緣無故 - 單個樹中的所有節點都會有相同的比較器。
所以最好的選擇是使它成爲容器的一部分。至於你反對節點無法比較自己,爲什麼這很重要?唯一一次你會比較兩個節點是在容器上的一個操作的上下文中,在這種情況下,你會有方便的比較器對象。
相關問題
- 1. javascript的一個小問題
- 2. ImageView的 - 一個小問題
- 3. 實現問題
- 4. Twitter Oauth GMT/BST問題
- 5. BST在Python中的實現錯誤
- 6. 基本BST問題從一個新的程序員
- 7. 這個堆棧實現的問題
- 8. 2-Satisfiability問題中的實現問題
- 9. @BeforeMethod實現問題
- 10. TPL實現問題
- 11. 實現perror() - 問題
- 12. 問題實現UINavigationControllerDelegate
- 13. DateTime.TryParse實現問題
- 14. Observer實現問題
- 15. zoomToSpan實現問題
- 16. 如何在Julia中實現BST?
- 17. BST實施
- 18. h:dataTable實現中的問題
- 19. SSO的實現問題
- 20. IEnumerator的實現問題
- 21. 實現jquery.maphilight.min.js的問題
- 22. kbhit實現的問題
- 23. counter_cache實現的問題
- 24. Singleton實現的問題
- 25. 一個java實踐問題
- 26. 實現iPad上的一個網格的UITableView ...問題
- 27. 一些IBindableComponent接口實現問題
- 28. 如何實現一個小部件?
- 29. 這個QuickSort實現有什麼問題?
- 30. 這個單例實現有問題嗎?