C++ 将std::对迭代器转换为boost::迭代器\u范围

C++ 将std::对迭代器转换为boost::迭代器\u范围,c++,boost,iterator,boost-range,C++,Boost,Iterator,Boost Range,我有一个std::multimap,我想从equal\u range创建一个boost::iterator\u range。我在文档中没有找到简单的方法,因此我尝试了以下方法: typedef std::multimap<int, std::string> Map; Map map; ... boost::iterator_range<Map::iterator> r(map.equal_range(2)); typedef std::multimap映射; 地图; .

我有一个
std::multimap
,我想从
equal\u range
创建一个
boost::iterator\u range
。我在文档中没有找到简单的方法,因此我尝试了以下方法:

typedef std::multimap<int, std::string> Map;
Map map;
...
boost::iterator_range<Map::iterator> r(map.equal_range(2));
typedef std::multimap映射;
地图;
...
迭代器_范围r(map.equal_范围(2));

令人惊讶的是,它可以工作(使用GCC4.1.2)。我很好奇它是如何工作的。我没有找到可以执行此操作的
iterator\u range
构造函数的重载,而且
multimap::iterator\u range
显然没有返回提升范围的重载。

iterator\u range\u 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 ) )
{}

例如,我们可以看看类型如何“适应”到范围中(他们使用
pair
作为示例)。

注意,还有
boost::make_iterator_range
从对中推断出基础迭代器类型。
template< typename Iterator >
inline Iterator range_begin( const std::pair<Iterator,Iterator>& p )
{
    return p.first;
}