boost ptree 即时修改一组值

Posted

技术标签:

【中文标题】boost ptree 即时修改一组值【英文标题】:boost ptree modify an array of values on the fly 【发布时间】:2015-05-22 21:18:02 【问题描述】:

我开始使用 boost 中的 ptree 和 json 解析器来保存一些快速信息。 问题是我只需要保存一些URI,所以我不关心密钥。 现在我想找到某个值并将其删除。 我该怎么做呢


    "MyArray":
     [
              "value1",
              "value2"
     ]

我无法使用 find() 并且迭代器似乎不起作用。

for (it ; it != myptree.end();  ++it)
    if ((*it).second.data.compare(strValueImSearching) != 0)
    // the previous line is not valid from .data
         myptree.erase(it);

【问题讨论】:

我找到了一种解决方法,但不确定这是最好的方法。 pastebin.com/s2HH2UgS 这实际上说得很清楚。我编辑了令人困惑的标题。 “查询值数组”没有问题。此外,迭代器工作。但没有一次失效。请参阅我的新答案。 【参考方案1】:

啊。灯泡时刻。

您不能迭代这样变化的集合,因为erase 调用使当前迭代器无效。

迭代器失效规则见这里:Iterator invalidation rules

相反,确实使用稳定的迭代器:

while (it != myptree.end()) 
     if ((*it).second.data.compare(strValueImSearching) != 0)
         it = myptree.erase(it);
     else
         ++it;

【讨论】:

以上是关于boost ptree 即时修改一组值的主要内容,如果未能解决你的问题,请参考以下文章

修改 Boost Python 包装类?

我们如何在另一个 boost ptree 中插入一个 boost ptree 作为节点?

boost::ptree 和 KeyCompare 函数?

如何手动创建具有 XML 属性的 boost ptree?

如何使用 boost ptree 删除 xml 属性?

如何使用 ptree(boost) 遍历 XML 文件中的同名子级?