2013-04-09 76 views
1

遍歷的遞歸變型矢量我想建立構建的載體樹如下如何使用Boost C++

struct myStruct { 
    int a; 
    string b; 
}; 

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

如果我追加多載體,以及這些載體,我怎麼會遍歷使用樹某種位置矢量

vector<int> 

哪些定位矢量指針樹中定義的每個矢量/子矢量中的對象位置。

回答

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指針)的版本。此外,它應該是返回引用或拋出以處理錯誤的那個。
  • 考慮用自己的代碼替換範圍檢查以提供更好的診斷。我沒有這樣做,以保持算法的結構清晰。