12#include <boost/iterator/zip_iterator.hpp>
13#include <boost/range.hpp>
27 class PairIterator :
public std::iterator<std::forward_iterator_tag, ValueType_t<PairType, FirstIt, SecondIt>>
37 : IsSentinel_ {
true }
43 : IsSentinel_ {
false }
54 (First_ ==
other.First_ && Second_ ==
other.Second_);
59 return !(*
this ==
other);
64 return IsSentinel_ || First_ == FirstEnd_ || Second_ == SecondEnd_;
86 return { *First_, *Second_ };
90 template<
typename I1,
typename I2,
template<
typename,
typename>
class PairType>
95 template<
typename C1,
typename C2>
107 template<
template<
typename,
typename>
class PairType =
QPair,
typename C1,
typename C2>
PairType< typename std::iterator_traits< FirstIt >::value_type, typename std::iterator_traits< SecondIt >::value_type > operator*() const
PairIterator & operator++()
bool operator==(const PairIterator &other) const
PairIterator(const FirstIt &first, const FirstIt &firstEnd, const SecondIt &second, const SecondIt &secondEnd)
bool operator!=(const PairIterator &other) const
ZipRange(C1 &&c1, C2 &&c2)
PairType< typename std::iterator_traits< FirstIt >::value_type, typename std::iterator_traits< SecondIt >::value_type > ValueType_t
detail::ZipRange< typename C1::const_iterator, typename C2::const_iterator, PairType > Zip(const C1 &c1, const C2 &c2)
Container< T > Filter(const Container< T > &c, F f)