获取boost property_tree父节点

时间:2017-07-28 06:54:15

标签: c++ boost boost-propertytree

我在我的程序中使用boost property_tree。我已经设置了树以使用自定义路径类型。我正在寻找的是获取特定节点的父节点ID。

以下是一个例子:

MetaStorageTree tree;

typedef boost::property_tree::basic_ptree<Framework::CommonClientServer::InterfacePathChain_t, MetaStorageTreeNode*>
    MetaStorageTreeNode_t;
class MetaStorageTree : public MetaStorageTreeNode_t;

MetaStorageTreeNode* node = new MetaStorageTreeNode(1);
MetaStorageTreeNode* node1 = new MetaStorageTreeNode(2);
tree.put(InterfacePathChain_t{0}, node);
tree.put(InterfacePathChain_t{0, 0}, node1);
tree.put(InterfacePathChain_t{0, 1}, node1);
tree.put(InterfacePathChain_t{0, 0, 0}, node);
tree.put(InterfacePathChain_t{0, 1, 0}, node1);
tree.put(InterfacePathChain_t{0, 1, 1}, node);

//InterfacePathChain_t is basically a vector<int>

结果如预期:

{0}: 1
    {0}: 2
        {0}: 1
    {1}: 2
        {0}: 2
        {1}: 1

我需要的是一种在不永久存储节点的情况下获取节点的完整ID的方法。我在想的是一种简单地获取其父节点id并将其推送到路径前面的方法,以此类推到顶层。但我似乎无法在property_tree中找到一种方法。这可能吗?如果不是,有没有其他方法计算这种情况的完整路径?

例如,对于路径为{0,1,0}的节点:

  1. id == 0 =&gt; path = {0}
  2. parent!= NULL =&gt; parent.id == 1 =&gt; path = {1,0}
  3. parent!= NULL =&gt; parent.id == 0 =&gt; path = {0,1,0}
  4. parent == NULL =&gt;端

1 个答案:

答案 0 :(得分:4)

你做不到。

Boost Ptree节点是自包含的,不知道任何包含数据结构(它是单个链表的“树”)。

作为最佳近似值,您可以在父母内部查找孩子,例如与C++: boost ptree relative key中的内容类似。

这假设您总是可以搜索“根”。