我在我的程序中使用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}的节点:
答案 0 :(得分:4)
你做不到。
Boost Ptree节点是自包含的,不知道任何包含数据结构(它是单个链表的“树”)。
作为最佳近似值,您可以在父母内部查找孩子,例如与C++: boost ptree relative key中的内容类似。
这假设您总是可以搜索“根”。