C++提升 ptree 重命名键
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"
}
}
}
您可以使用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);
相关文章:
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 通过重命名C++中的符号来减小二进制大小
- 如何以与 API 兼容的方式重命名类成员?
- 如何在Visual Studio Code中重命名我的a.exe文件?
- 在Qt中复制,剪切,粘贴,重命名,撤消和重做
- 重命名 win32api 函数以进行混淆
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 如何在重命名函数 (c++) 中使用变量?
- 如何通过 boost::p ython 重命名构造函数的关键字参数
- 以编程方式防止重命名或删除文件,但仍使其可写
- C++:重命名dll和lib并链接
- 使用 stdio.h 重新定位和重命名文件C++
- C++ Qt5 QDir重命名返回错误
- C++提升 ptree 重命名键
- 如何检测哪些进程更改,重命名或创建文件?
- 禁用/重命名从主机环境导入"env"
- 录制后无法重命名 rosbag 文件
- 避免在统计数据和重命名之间进行TOCTOU(检查时间,使用时间)
- 将文件重命名为已存在的文件名
- 重命名两个目录中的文件名,如果它们之间的某些字符匹配 - 矢量下标超出范围