に関する情報を保持するレコードを作成したい
- a) どのような要素が存在し、
- b) 存在する各種類の要素の数
ツリーのノードで。親ノードの情報は、すべての子の情報を組み合わせることで取得できますが、この情報はリーフ ノードにのみ明示的に保存します (たとえば、子 1 には A のオブジェクトが 3 つ、B のオブジェクトが 1 つ、子 2 には 1 つのオブジェクトがあります)。 A のオブジェクト、C の 2 つのオブジェクト -- 親には A の 4 つのオブジェクト、B の 1 つのオブジェクト、C の 2 つのオブジェクトがあります)。
親ノードからこの情報を要求するときは、最初に子ノード、次にその親ノードの情報を要求、使用、および破棄しないように注意しますが、上向きの構築は一般的な操作です。他の 2 つの一般的な操作は、格納したものから直接派生します:種類 X のオブジェクトは存在しますか? また、種類 X のオブジェクトはいくつ存在しますか? また、何種類のオブジェクトが存在しますか?
オブジェクトの種類は整数で表され、オブジェクト番号は常に整数値です。より良い選択 (および選択した選択の引数) は何ですか?
- を使用し
std::multiset<int>
、 および 操作でstd::multiset::count()
操作しstd::multiset::find()
ます (結合は簡単ですが、要素の複製、別個の要素の合計数を取得するのは困難です) - 種類をキーとして、オブジェクトの数を値として使用
std::map<int, std::size_t>
します (重複する要素がなく、std::map::find()
関数が存在し、サイズによって格納されているオブジェクトの種類の正しい数が得られますが、存在しない要素にアクセスするとサイズが意図せず増加します)
ご提案ありがとうございます。