【问题标题】:How to traverse a recursive variant vector using Boost C++如何使用 Boost C++ 遍历递归变体向量
【发布时间】:2013-04-01 04:37:42
【问题描述】:

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

struct myStruct {
    int a;
    string b;
};

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

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

vector<int>

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

【问题讨论】:

    标签: c++ search boost tree


    【解决方案1】:

    我不是 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&lt;1&gt;(*tit);,我的意思是检索第一个元素的版本(即 myStruct 指针)。此外,它应该是返回引用或抛出以处理错误的那个。
    • 考虑用您自己的代码替换范围检查,以提供更好的诊断。我这样做不是为了保持算法结构清晰。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      • 2016-09-19
      相关资源
      最近更新 更多