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_bound와 ranges::upper_bound를 합친 연산이에요.