別のオブジェクトへの参照のリストを含む別のタイプのオブジェクトへの参照のリストを含むオブジェクトによって作成されるツリーのようなシステムを持っています...など。
したがって、すべて異なるタイプのオブジェクトのツリーが得られます。
今、私が今していることは、「for each」ループを使用して、必要なオブジェクトに到達するまで、親の下にある各要素を取得することです。(これらのオブジェクトには、私もアクセスする必要がある文字列が含まれています。この文字列が探しているものと一致する場合は、フラグを設定します。複数の一致がある可能性がありますが、確認する必要があるのは 1 つだけです。)
これは、そのフラグを設定するとどうなるかについて別のポイントを提起します。これ以上続行する必要がないためです。これは、一致が 1 つの文字列で見つかった場合、プログラムの残りの部分を続行できると想定できるためです。したがって、これにより、ツリーの残りの反復が無意味になります。
私は C++ MFC で作業しているため、問題があれば CString を探しています。
「子」オブジェクトを保持するコンテナーのレイヤーは、親オブジェクトのベクターとして始まり、その後に子オブジェクトのリストが続き、その後に子オブジェクトのリストが続きます。
ツリーのブランチを次のようにします。
Initial Vector: { 1object1, 1object2, 1object3, ..., 1objectN }
object1 List: { 2object1, 2object2, 2object3, ...,2objectN }
2object1 List: { 3object1, ... 3objectN }
if (3object1.name() == "match")
{
flag = TRUE;
break?
}
質問を一般的なものにするために、ベクトルとリストを使用しているにもかかわらず、使用される実装についてあまりうるさくはありません。
私の実際のコードは次のようになります。
bool flag = FALSE;
for each (1Object 1object in m_1Objects)
for each (2Object 2object in 1object.Get2Objects())
for each (3Object 3object in 2object.Get3Objects())
if (3object.GetName() == "match") flag = TRUE;
おわかりのように、システムが大きくなりすぎると、これを実行するのに永遠にかかる可能性があります。特に、フラグが設定されたら、それから抜け出す方法がわからないためです。
これを行うためのより効率的でクリーンな方法は何でしょうか?