在boost属性树中,我想将一个键(例如a.b.c2)重命名为a.b.c3。
一种方法是删除节点并使用另一个名称放置其副本。问题在于该节点被放置在其他同级节点的末尾。我更喜欢保持顺序。如何修复这段代码?
一种方法是删除节点并使用另一个名称放置其副本。问题在于该节点被放置在其他同级节点的末尾。我更喜欢保持顺序。如何修复这段代码?
#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/algorithm/string/predicate.hpp>
using namespace boost::property_tree;
void print(const ptree &p)
{
json_parser::write_json(std::cout, p);
}
int main()
{
ptree pt0;
pt0.put("a.b.c1",4);
pt0.put("a.b.c2.e1",4);
pt0.put("a.b.c4",2);
pt0.put("a.d",4);
pt0.put("k.m",4);
pt0.put("k.n.as",4);
std::string key_parent="a.b";
std::string full_key="a.b.c2";
std::string full_key2="a.b.c3";
ptree node=pt0.get_child(full_key);
pt0.get_child(key_parent).erase("c2");
pt0.put_child(full_key2,node);
print(pt0);
return 0;
}
结果:
// before:
{
"a": {
"b": {
"c1": "4",
"c2": {
"e1": "4"
},
"c4": "2"
},
"d": "4"
},
"k": {
"m": "4",
"n": {
"as": "4"
}
}
}
// after:
{
"a": {
"b": {
"c1": "4",
"c4": "2",
"c3": {
"e1": "4"
}
},
"d": "4"
},
"k": {
"m": "4",
"n": {
"as": "4"
}
}
}