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;
}