equal_range 应该如何工作?
Posted
技术标签:
【中文标题】equal_range 应该如何工作?【英文标题】:How is equal_range supposed to work? 【发布时间】: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
访问它们。
【问题讨论】:
【参考方案1】: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';
【讨论】:
或者,如果有很多服务器子节点,每个子节点都有一个 url 叶,您可以将 equal_range 应用于第一级,然后在每个位置提取一个名为 url 的子节点以上是关于equal_range 应该如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
equal_range 和 2 重载对“this”指针没有合法转换
在 boost::unordered_multimap 中循环遍历 equal_range