C ++ Boost Ptree Rename Key

В дереве свойств буста я бы хотел переименовать ключ, такой как 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"}
}
}

3

Решение

Ты можешь использовать insert а также iterator сделать это.

ptree &child = pt0.get_child("a.b");
ptree::iterator it = child.to_iterator(child.find("c2"));
child.insert(it, make_pair("c3", it->second));
child.erase(it);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]