如何迭代boost属性树?
我知道如何使用 boost 属性树,并且发现它是用于 C++ 编程的 boost 库的一个很好的功能。
嗯,我有一个疑问?如何使用迭代器或类似的方法迭代属性树?
在参考文献中,只有一个浏览树的示例:
BOOST_FOREACH
但是没有更多的了吗?类似 stl 的容器之类的东西?谈到代码质量,这将是一个更好的解决方案......
I am know approaching to boost property tree and saw that it is a good feature of boost libs for c++ programming.
Well, I have one doubt? how to iterate a property tree using iterators or similar?
In reference there is just an example of browsing the tree through:
BOOST_FOREACH
But is there nothing more? Something like an stl-like container? It would be a better solution, speaking about code quality....
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这是我经过多次实验后得出的结论。我想在社区中分享它,因为我找不到我想要的东西。每个人似乎都只是发布了 boost 文档的答案,我发现这还不够。无论如何:
这是输出:
Here is what I came up with after much experimentation. I wanted to share it in the community because I couldn't find what I wanted. Everybody seemed to just post the answer from the boost docs, which I found to be insufficient. Anyhow:
Here is the output:
BOOST_FOREACH 只是一种方便的迭代方法,可以通过迭代器、begin() 和 end() 来完成
,从 C++11 开始,它是:
BOOST_FOREACH is just a convenient way for iterating that can be done by iterator, begin() and end()
And since C++11 it's:
我最近遇到了这个问题,发现答案不完整,无法满足我的需要,所以我想出了这个简短而甜蜜的片段:
需要注意的是,除根节点之外的任何节点都可以包含数据以及子节点。 if (!key.empty()) 位将获取除根节点之外的所有节点的数据,我们还可以开始构建该节点的子节点(如果有)的循环路径。
您可以通过调用
parse_tree(root_node, "")
来开始解析,当然您需要在该函数内执行一些操作以使其值得执行。如果您正在进行一些不需要完整路径的解析,只需删除 nkey 变量及其操作,然后将 it->first 传递给递归即可功能。
I ran into this issue recently and found the answers incomplete for my need, so I came up with this short and sweet snippet:
Important to note is that any node, except the root node can contain data as well as child nodes. The
if (!key.empty())
bit will get the data for all but the root node, we can also start building the path for the looping of the node's children if any.You'd start the parsing by calling
parse_tree(root_node, "")
and of course you need to do something inside this function to make it worth doing.If you are doing some parsing where you don't need the FULL path, simply remove the
nkey
variable and it's operations, and just passit->first
to the recursive function.答案的补充如何迭代boost属性树?< /a> :
在基于
for (auto node : tree)
的 C++11 样式范围中,每个node
都是一个std::pair
而在手动编写的迭代中,
迭代器
it
是指向这样一个对的指针。这在使用上有微小的差异。例如,要访问密钥,可以写it->first
但node.first
。作为新答案发布,因为我对原始答案的提议编辑被拒绝,并建议发布新答案。
An addition to the answer How to iterate a boost property tree? :
In the C++11 style range based for
for (auto node : tree)
, eachnode
is astd::pair<key_type, property_tree>
Whereas in the manually written iteration
the iterator
it
is a pointer to such a pair. It's a tiny difference in usage. For example, to access the key, one would writeit->first
butnode.first
.Posted as a new answer, because my proposed edit to the original answer was rejected with the suggestion to post a new answer.
基于 BFS 的打印 ptree 遍历,如果我们想做一些算法操作,可以使用
BFS based print ptree traversal, May be used if we want to do some algorithmic manipulation