将std :: pair迭代器转换为boost :: iterator_range

时间:2012-04-16 09:41:34

标签: c++ boost iterator boost-range

我有std::multimap,我想从boost::iterator_range创建equal_range。我发现在文档中没有简单的方法,所以我尝试了以下内容:

typedef std::multimap<int, std::string> Map;
Map map;
...
boost::iterator_range<Map::iterator> r(map.equal_range(2));

令人惊讶的是,它有效(使用GCC 4.1.2)。我很好奇它是如何工作的。我发现iterator_range构造函数没有重载,而且multimap::iterator_range显然没有重载会返回Boost范围。

1 个答案:

答案 0 :(得分:8)

iterator_range_core.hpp

//! Constructor from a Range
template< class Range >
iterator_range( const Range& r ) :
    m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
{}

impl::adl_begin将您带到boost::begin。看看我们看到的begin.hpp(以及其他 voodoo ):

template< typename Iterator >
inline Iterator range_begin( const std::pair<Iterator,Iterator>& p )
{
    return p.first;
}

例如,如何将类型“调整”到范围中,看看here(他们使用pair作为示例)。