1

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

struct myStruct {
    int a;
    string b;
};

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

如果我附加多个向量,以及这些向量中的向量,我将如何使用某种位置向量遍历树

vector<int>

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

4

1 回答 1

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 指针)。此外,它应该是返回引用或抛出以处理错误的那个。
  • 考虑用您自己的代码替换范围检查,以提供更好的诊断。我这样做不是为了保持算法的结构清晰。
于 2013-04-10T04:59:35.160 回答