0
#include <boost/property_tree/ptree.hpp>
#include <string>
#include <iostream>

int main()
{
    boost::property_tree::ptree ptree;
    const std::string entry = "server.url";
    ptree.add( entry, "foo.com" );

    auto range = ptree.equal_range( entry );
    for( auto iter = range.first ; iter != range.second ; ++iter )
        std::cout << iter->first << '\n';
}

我不明白为什么这段代码不打印。由于可能有很多server.url条目,我试图使用equal_range.

4

1 回答 1

3

equal_range不适用于路径。添加后,您的 ptree 如下所示:

<root>
  "server"
    "url": "foo.com"

equal_range它正在直接在根节点内寻找名为“server.url”的子节点。

此外,您可能想要打印出来it->second.data(),因为前者只会为每个找到的条目打印“server.url”。

这是更正后的代码:

#include <boost/property_tree/ptree.hpp>
#include <string>
#include <iostream>

int main()
{
    boost::property_tree::ptree ptree;
    const std::string entry = "server.url";
    ptree.add( entry, "foo.com" );

    auto range = ptree.get_child("server").equal_range( "url" );
    for( auto iter = range.first ; iter != range.second ; ++iter )
        std::cout << iter->second.data() << '\n';
}
于 2015-04-17T08:59:04.730 回答