我有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范围。
答案 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
作为示例)。