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