如何使用Boost C ++遍历递归变量向量

时间:2013-04-09 16:16:29

标签: c++ search boost tree

我想构建一个如下构造的矢量树

struct myStruct {
    int a;
    string b;
};

typedef boost::make_recursive_variant<
      myStruct *
    , std::vector< boost::recursive_variant_ >
    >::type myStruct_tree;

如果我在这些向量中追加多个向量和向量,我将如何使用某种位置向量遍历树

vector<int>

用于定位向量指针树中定义的每个向量/子向量中的对象位置。

1 个答案:

答案 0 :(得分:0)

我不是100%肯定我理解你的问题,所以请澄清我是否出错了。我假设向量是一个路径,每个元素给出要移动的元素的索引。考虑到这一点,我会尝试这样的事情:

myStruct_tree t = ...;

myStruct_tree* tit = &t;
for(iterator pit=path.begin(); pit!=path.end(); ++pit)
{
    // retrieve branches at current position
    vector<myStruct_tree>& vec = get<2>(*tit);

    // get next position in tree, will throw on bad index
    tit = &vec.at(*pit);
}
assert(tit);

// retrieve the leaf at the final position
myStruct* res = get<1>(*tit);

注意:

  • 对索引使用无符号整数对我来说会更自然。
  • vector :: at()会在超出范围时抛出异常。
  • 我没有查找如何获取变体元素的确切语法。对于我上面使用的版本get<1>(*tit);,我的意思是检索第一个元素的那个(即myStruct指针)。此外,它应该是返回引用或抛出以处理错误的那个。
  • 考虑使用您自己的代码替换范围检查,以便提供更好的诊断。我没有这样做,以保持算法的结构清晰。