9

我有一个std::multimap,我想创建一个boost::iterator_rangefrom 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 范围。

4

1 回答 1

9

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我们看到(在其他巫术中):

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

例如,如何将类型“适应”到范围中,请看这里(他们pair用作示例)。

于 2012-04-16T09:59:31.857 回答