Boost:如何将子树添加到现有树中
Boost: How to add child tree into an existing tree
我有以下 属性 树。
propset1
{
prop1 2
prop2 5
prop3 60
prop4 7
}
我正在尝试向其中添加几棵子树,以便生成的 属性 树如下所示。
propset1
{
prop1 2
prop2 5
prop3 60
prop4 5
childset1
{
child1prop1 4
child1prop1 6
child1prop1 9
}
childset2
{
child2prop1 2
child2prop1 6
child2prop1 7
}
}
我写了下面的代码。
// Add General config
pt::ptree propset1;
propset1.put("propset1.prop1", 2);
propset1.put("propset1.prop2", 5);
propset1.put("propset1.prop3", 60);
propset1.put("propset1.prop4", 7);
// Add childset1 config
pt::ptree childset1;
childset1.add("child1prop1", 4);
childset1.add("child1prop2", 6);
childset1.add("child1prop3", 9);
propset1.add_child("childset1", childset1);
// Add childset2 config
pt::ptree childset2;
childset2.add("child2prop1", 2);
childset2.add("child2prop2", 6);
childset2.add("child2prop3", 7);
propset1.add_child("childset2", childset2);
但是上面的代码会生成下面的 属性 树。
propset1
{
prop1 2
prop2 5
prop3 60
prop4 5
childset1
{
child1prop1 4
child1prop1 6
child1prop1 9
}
}
propset1
{
prop1 2
prop2 5
prop3 60
prop4 5
childset2
{
child2prop1 2
child2prop1 6
child2prop1 7
}
}
有人可以建议 API 的正确用法吗?
你是另一种你没有表现出来的东西:
#include <boost/property_tree/info_parser.hpp>
#include <sstream>
#include <iostream>
using boost::property_tree::ptree;
int main() {
ptree pt;
{
std::istringstream iss(R"(propset1
{
prop1 2
prop2 5
prop3 60
prop4 7
})");
read_info(iss, pt);
}
auto& propset1 = pt.get_child("propset1");
// Add childset1 config
ptree childset1;
childset1.add("child1prop1", 4);
childset1.add("child1prop2", 6);
childset1.add("child1prop3", 9);
propset1.add_child("childset1", childset1);
// Add childset2 config
ptree childset2;
childset2.add("child2prop1", 2);
childset2.add("child2prop2", 6);
childset2.add("child2prop3", 7);
propset1.add_child("childset2", childset2);
write_info(std::cout, pt);
}
打印:
propset1
{
prop1 2
prop2 5
prop3 60
prop4 7
childset1
{
child1prop1 4
child1prop2 6
child1prop3 9
}
childset2
{
child2prop1 2
child2prop2 6
child2prop3 7
}
}
我有以下 属性 树。
propset1
{
prop1 2
prop2 5
prop3 60
prop4 7
}
我正在尝试向其中添加几棵子树,以便生成的 属性 树如下所示。
propset1
{
prop1 2
prop2 5
prop3 60
prop4 5
childset1
{
child1prop1 4
child1prop1 6
child1prop1 9
}
childset2
{
child2prop1 2
child2prop1 6
child2prop1 7
}
}
我写了下面的代码。
// Add General config
pt::ptree propset1;
propset1.put("propset1.prop1", 2);
propset1.put("propset1.prop2", 5);
propset1.put("propset1.prop3", 60);
propset1.put("propset1.prop4", 7);
// Add childset1 config
pt::ptree childset1;
childset1.add("child1prop1", 4);
childset1.add("child1prop2", 6);
childset1.add("child1prop3", 9);
propset1.add_child("childset1", childset1);
// Add childset2 config
pt::ptree childset2;
childset2.add("child2prop1", 2);
childset2.add("child2prop2", 6);
childset2.add("child2prop3", 7);
propset1.add_child("childset2", childset2);
但是上面的代码会生成下面的 属性 树。
propset1
{
prop1 2
prop2 5
prop3 60
prop4 5
childset1
{
child1prop1 4
child1prop1 6
child1prop1 9
}
}
propset1
{
prop1 2
prop2 5
prop3 60
prop4 5
childset2
{
child2prop1 2
child2prop1 6
child2prop1 7
}
}
有人可以建议 API 的正确用法吗?
你是另一种你没有表现出来的东西:
#include <boost/property_tree/info_parser.hpp>
#include <sstream>
#include <iostream>
using boost::property_tree::ptree;
int main() {
ptree pt;
{
std::istringstream iss(R"(propset1
{
prop1 2
prop2 5
prop3 60
prop4 7
})");
read_info(iss, pt);
}
auto& propset1 = pt.get_child("propset1");
// Add childset1 config
ptree childset1;
childset1.add("child1prop1", 4);
childset1.add("child1prop2", 6);
childset1.add("child1prop3", 9);
propset1.add_child("childset1", childset1);
// Add childset2 config
ptree childset2;
childset2.add("child2prop1", 2);
childset2.add("child2prop2", 6);
childset2.add("child2prop3", 7);
propset1.add_child("childset2", childset2);
write_info(std::cout, pt);
}
打印:
propset1
{
prop1 2
prop2 5
prop3 60
prop4 7
childset1
{
child1prop1 4
child1prop2 6
child1prop3 9
}
childset2
{
child2prop1 2
child2prop2 6
child2prop3 7
}
}