誰かが良いC++ツリーの実装、できればstlと互換性のあるものを推奨できるかどうか疑問に思っています。
記録のために、私はこれまで何度もツリーアルゴリズムを書いてきました。そして、それが楽しくなることは知っていますが、可能な限り実用的で怠zyになりたいです。したがって、実際のソリューションへの実際のリンクがここの目標です。
注:バランスの取れたツリーやマップ/セットではなく、一般的なツリーを探しています。この場合、構造自体とツリーの接続性が重要です。内部のデータだけではありません。したがって、各ブランチは任意の量のデータを保持できる必要があり、各ブランチは個別に反復可能である必要があります。
私はあなたの要件については知りませんが、あなたが主に構造に興味があり、ツリーにあまり興味がないなら、グラフ(例えば、 Boost Graph での実装)で良くなることはないでしょうか-バランスをとる速度のような特定の利点?グラフを介してツリーを「エミュレート」できます。おそらく、(概念的に)探しているものに近くなります。
this を見てください。
C++のtree.hhライブラリは、ノードに格納されたデータをテンプレートにしたn項ツリー用のSTLのようなコンテナクラスを提供します。さまざまなタイプの反復子が提供されます(ポストオーダー、プレオーダー、その他)。可能な場合、アクセス方法はSTLと互換性があるか、代替アルゴリズムが利用可能です。
HTH
ツリーの代わりにstd :: mapを使用することをお勧めします。
ツリーの複雑さの特性は次のとおりです。
挿入:O(ln(n))
削除:O(ln(n))
検索:O(ln(n))
これらは、std :: mapが保証するのと同じ特性です。
その結果、std :: mapのほとんどの実装では、カバーの下にツリー(赤黒ツリー)が使用されます(技術的には必須ではありません)。
わかりました、別のツリーライブラリを見つけました。 stlplus.ntree 。しかし、まだ試していない。
(キー、値)ペアがなく、単にキーがある場合は、std :: setを使用します。これは、std :: mapと同じ赤黒ツリーを使用します。