ranges::equal_range

ranges::equal_range (같은 값 구간 찾기)

정렬된 범위에서 같은 값의 구간을 ranges 버전으로 한 번에 찾는 알고리즘이에요. <algorithm> 헤더에 있어요.

출처: cppreference

본문

std::ranges::equal_range는 정렬된 범위에서 value와 같은 원소들의 구간을 반환해요.

namespace std::ranges {
template< std::forward_iterator I, std::sentinel_for<I> S, class T,
          class Proj = std::identity,
          std::indirect_strict_weak_order<const T*, std::projected<I, Proj>> Comp = ranges::less >
constexpr subrange<I> equal_range( I first, S last, const T& value,
                                   Comp comp = {}, Proj proj = {} );
}

반환 타입은 subrange<I>로, [lower_bound, upper_bound) 구간이 value와 같은 원소 전부를 나타내요. value가 없으면 빈 구간(삽입 위치)이 돼요.

복잡도는 로그적이에요.

std::vector<int> v{1, 2, 2, 2, 3, 4};
auto r = std::ranges::equal_range(v, 2);
// r는 [첫 2, 마지막 2+1) 구간

ranges::lower_boundranges::upper_bound를 합친 연산이에요.

더 알아보기 (Learn more)

cppreference