我有一个树状系统,它由一个对象创建,该对象包含对另一种类型对象的引用列表,该对象包含对另一个对象的引用列表……等等。
因此给了我一个对象树,所有不同的类型。
现在,我现在正在做的只是使用“for each”循环来一直抓取其父元素下的每个元素,直到我得到我想要的对象。(这些对象包含一个我也需要访问的字符串。如果这个字符串与我要查找的内容匹配,那么我设置一个标志。可能有多个匹配项,但我只需要确认一个。)
这提出了另一个问题,即一旦我设置了该标志,应该会发生什么,因为我不需要再继续下去了。这是因为如果在一个字符串上找到匹配项,那么我可以假设我可以继续我的程序的其余部分。因此,这使得树上的其余迭代变得毫无意义。
我在 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;
正如你所知道的,一旦系统变得太大,这可能需要永远运行。特别是因为一旦设置了标志,我不确定如何摆脱它。
什么是更有效和更清洁的方法?