ranges::binary_search

ranges::binary_search (정렬 범위 이진 탐색)

정렬된 범위에서 값을 이진 탐색으로 찾아 존재 여부를 판정하는 ranges 버전 알고리즘이에요. <algorithm> 헤더에 있어요.

출처: cppreference

본문

std::ranges::binary_search는 정렬된 [first, last)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 bool binary_search( I first, S last, const T& value, Comp comp = {}, Proj proj = {} );
}
  • comp(기본 ranges::less)로 비교해요. range 버전은 범위 하나도 받을 수 있어요.
  • *itvalue에 해당하면(즉 comp(*it, value)comp(value, *it)도 거짓이면) true.
std::vector<int> v{1, 3, 5, 7, 9};
bool found = std::ranges::binary_search(v, 5);   // true
bool found2 = std::ranges::binary_search(v, 4);  // false

범위가 정렬되어 있어야 해요. 존재 확인만 필요할 때 쓰고, 위치가 필요하면 ranges::lower_bound를 써요.

더 알아보기 (Learn more)

cppreference