2009-09-02 47 views
1

我正在爲二叉搜索樹編寫STL類容器。我有Tree本身和嵌套類TreeNode的模板類。
我的問題是我應該在哪裏放置比較鍵的二元謂詞函數 - 進入樹類還是進入Node類?如果我決定把它放在Tree類中,我的所有節點都不知道如何比較它們的鍵值:(
而且如果在一個Node類中,我應該使這個函數是否爲靜態的?BST實現的一個小問題

回答

1

比較應該在節點內部存儲的值之間,而不是節點本身之間,因此你不需要在任何一個建議的地方都有一個比較器,你可以將比較器類作爲treee(和節點)的模板參數,或者只是當你比較節點中的值時,依靠默認值工作。

1

很明顯,你不能使它成爲靜態的 - 如果你這樣做了,那麼具有兩種不同比較函數的兩棵不同的樹就不能工作以後會覆蓋全球)。同樣清楚的是,它不應該是每個節點 - 你會複製完全相同的功能,每個節點有一個內存命中,無緣無故 - 單個樹中的所有節點都會有相同的比較器。

所以最好的選擇是使它成爲容器的一部分。至於你反對節點無法比較自己,爲什麼這很重要?唯一一次你會比較兩個節點是在容器上的一個操作的上下文中,在這種情況下,你會有方便的比較器對象。