【问题标题】:How is equal_range supposed to work?equal_range 应该如何工作?
【发布时间】:2015-04-17 08:16:03
【问题描述】:
#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 访问它们。

【问题讨论】:

    标签: c++ boost boost-propertytree equal-range


    【解决方案1】:

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

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

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

    另外,您可能想要打印出it-&gt;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';
    }
    

    【讨论】:

    • 或者,如果有很多服务器子节点,每个子节点都有一个 url 叶,您可以将 equal_range 应用于第一级,然后在每个位置提取一个名为 url 的子节点
    猜你喜欢
    • 2016-02-16
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2017-01-14
    相关资源
    最近更新 更多