std::set
またはstd::map
のルートノードを取得するにはどうすればよいですか? begin()
とend()
イテレータを得るための関数を提供していますが、ドキュメントの中でルートを取得することについて何も見ていません。バイナリツリー(設定またはマップ)のルートを取得するにはどうすればよいですか?
答えて
これはできません。つまり、実装の詳細から自分自身を抽象化するために、イテレータを提供されたのです。さらに、私はC++標準の "tree"キーワードに対してCtrl + Fを行ったばかりで、設定/マップ実装の詳細に関連するものは5件しか見つかりませんでした。
rootのバイナリツリーが必要な場合は、独自のデータ構造を作成します。
標準ライブラリのものよりどれくらい悪いですか? – Zebrafish
@ゼブラフィッシュ。あなたが解決しようとしている問題は何ですか? –
find()とlower_bound()だけがあなたに与えられます。セット内に「賞」という言葉があり、lower_boundメソッドを使用するために「priz」で始まる単語のリストが必要だったとします。lower_bound( "priz")という低いイテレータを取得し、 「priz」と「priza」の間の範囲が必要なので、「priza」。私が既に最初のイテレータを持っていれば、私は手動で左右に行くことができます。私は根元から始めることを望んでいましたが、決して気にしませんでした。 – Zebrafish
Abstract Data Types(いずれもset
でもmap
もありません)のいずれにもルートノードの概念はありません。彼らがred–black treeとして実装されているという事実は実装の詳細です。ここで
- Set: Operations
- Map (associative array): Operations Wikipediaのページから
、ADT程度の利点の一つは、次のとおりです。
カプセル化
抽象化は、ADTの実装に特定の特性と能力があることを約束します。これらがADTオブジェクトを使用するために必要なすべてであることを認識していること。ユーザーは、ADTの使用方法に関する技術的知識は必要ありません。このようにして、実装は複雑になる可能性がありますが、実際に使用されると単純なインタフェースにカプセル化されます。
実装についてあまりにも多くのことを知っているので、カプセル化を中断しようとしているようです。
質問を編集して、必要な理由を説明してください。おそらくそれは必要ありません。 –