我想从 boost 属性树中删除一个节点,但我想保留其子节点并将它们连接到已删除节点的父节点(即连接到其祖父母节点)。有没有一种优雅的方法来实现这一目标?
这可能是移动孙子的最有效方法:
std::move(middle.begin(), middle.end(), back_inserter(parent));
完整样本
Live On Coliru
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;
using boost::property_tree::read_json;
using boost::property_tree::write_json;
int main() {
std::istringstream iss(R"({ "a" : { "middle" : { "a1":1, "a2":2, "a3":3 }, "more":"stuff" } })");
ptree pt;
read_json(iss, pt);
auto& parent = pt.get_child("a");
auto& middle = pt.get_child("a.middle");
std::move(middle.begin(), middle.end(), back_inserter(parent));
parent.erase("middle");
write_json(std::cout, pt);
}
示例 json 输出:
{
"a": {
"more": "stuff",
"a1": "1",
"a2": "2",
"a3": "3"
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)