15template <std::ranges::input_range R1, std::ranges::input_range R2,
16 class Comp = std::ranges::less,
class Proj1 = std::identity,
17 class Proj2 = std::identity>
18 requires(std::ranges::view<R1> && std::ranges::view<R2>)
20 : std::ranges::view_interface<
38 template <std::input_iterator I1, std::sentinel_for<I1> S1,
39 std::input_iterator I2, std::sentinel_for<I2> S2>
58 using value_type = std::tuple<
decltype(*first1),
decltype(*first2)>;
94 template <
class I1,
class S1,
class I2,
class S2>
101 [[nodiscard]]
auto begin() const -> std::input_or_output_iterator auto {
107 [[nodiscard]]
auto end() const
115template <std::ranges::viewable_range R1, std::ranges::viewable_range R2,
116 class Comp = std::ranges::less,
class Proj1 = std::identity,
117 class Proj2 = std::identity>
118set_intersection_iterable<std::ranges::views::all_t<R1>,
119 std::ranges::views::all_t<R2>, Comp, Proj1, Proj2>
124 std::ranges::views::all_t<R2>, Comp,
127 { s.end() } -> std::sentinel_for<
decltype(s.begin())>;
130 std::forward<R1>(r1), std::forward<R2>(r2), std::move(comp),
131 std::move(proj1), std::move(proj2),
set_intersection_iterable< std::ranges::views::all_t< R1 >, std::ranges::views::all_t< R2 >, Comp, Proj1, Proj2 > iter_set_intersection(R1 &&r1, R2 &&r2, Comp comp={}, Proj1 proj1={}, Proj2 proj2={})
bool operator!=(sentinel_t) const
std::ptrdiff_t difference_type
value_type operator*() const
friend bool operator==(sentinel_t s, const iter_t &i)
bool operator==(sentinel_t s) const
friend bool operator!=(sentinel_t s, const iter_t &i)
std::tuple< decltype(*first1), decltype(*first2)> value_type
iter_t(I1 first1, S1 last1, I2 first2, S2 last2, Comp comp, Proj1 proj1, Proj2 proj2)
set_intersection_iterable(R1 &&range1, R2 &&range2, Comp &&comp, Proj1 &&proj1, Proj2 &&proj2)
auto begin() const -> std::input_or_output_iterator auto
iter_t< I1, S1, I2, S2 > iter(I1 first1, S1 last1, I2 first2, S2 last2) const
set_intersection_iterable()=default