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버전은 범위 하나도 받을 수 있어요.*it이value에 해당하면(즉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를 써요.