2009-09-02 11 views
1

バイナリ検索ツリーのSTLのようなコンテナを書いています。私はTree自体と入れ子になったクラスTreeNodeのためのテンプレートクラスを持っています。
私の質問は、ツリークラスまたはNodeクラスにキーをコンパイルするバイナリ述語関数をどこに置くべきかです。私がTreeクラスに入れることにした場合、私のノードのすべてがキーの比較方法を知らないでしょう:(
そして、Nodeクラスであれば、この関数を静的にするかどうかを指定しますか?BSTの実装に少し問題があります

答えて

1

したがって、あなたは提案された場所のいずれかでコンパレータを必要としません。コンパイラクラスをtreee(およびノー​​ド)のテンプレート化されたパラメータとして取得するか、

1

これを静的にすることはできません - もしそうした場合、2つの異なる比較関数を持つ2つの異なるツリーは機能しません後でグローバルに上書きされます)。

これは、ノードごとに行うべきではないことも明らかです.1つのツリー内のすべてのノードが同じ比較機能を持つため、全く同じ機能を複製することになります。

したがって、コンテナの一部にすることをお勧めします。ノードが自分自身を比較することができないというあなたの異論に関しては、それはなぜ重要なのでしょうか? 2つのノードを比較する唯一の時間はコンテナの操作のコンテキストにあります。その場合は、comparerオブジェクトを手軽に使用できます。

関連する問題