std::ranges::is_sorted
| 헤더 <algorithm>
|
||
| 에 정의됨 |
||
template< std::forward_iterator I, std::sentinel_for<I> S,
class Proj = std::identity,
std::indirect_strict_weak_order<std::projected<I, Proj>>
Comp = ranges::less >
constexpr bool
is_sorted( I first, S last, Comp comp = {}, Proj proj = {} );
|
호출 시그니처 | (1) |
template< ranges::forward_range R, class Proj = std::identity,
std::indirect_strict_weak_order<
std::projected<ranges::iterator_t<R>, Proj>>
Comp = ranges::less >
constexpr bool
is_sorted( R&& r, Comp comp = {}, Proj proj = {} );
|
(C++20부터) | (2) |
(C++20부터)[first, last)범위
의 요소들이 비내림차순으로 정렬되어 있는지 확인합니다.
comp시퀀스는 비교자 it에 대해 정렬되어 있다고 말할 수 있습니다. 이는 시퀀스를 가리키는 임의의 반복자 n와, it + n가 시퀀스의 요소를 가리키는 유효한 반복자가 되는 음이 아닌 정수 std::invoke(comp, std::invoke(proj, *(it + n)), std::invoke(proj, *it))에 대해, false가
comp 요소들은 주어진 이진 비교 함수 r을 소스 범위로 사용하며, 이는 ranges::begin(r)를 first로, ranges::end(r)를 last로 사용하는 것과 같습니다.이 페이지에 설명된 함수형 개체들은 알고리즘 함수 객체입니다 (비공식적으로 niebloids라고도 함). 즉:
- 이들 중 어떤 것을 호출할 때 명시적 템플릿 인자 목록을 지정할 수 없습니다.
- 그 중 어떤 것도 인자 종속 조회에 표시되지 않습니다.
- 함수 호출 연산자의 왼쪽에 있는 이름으로 일반적인 비한정 조회에 의해 발견되면, 인자 종속 조회가 억제됩니다.
매개변수
| first, last | - | 정렬되었는지 확인할 요소들의 범위 를 정의하는 반복자-감시자 쌍 |
| r | - | 정렬되었는지 확인할 요소들의 범위 |
| comp | - | 투영된 요소들에 적용할 비교 함수 |
| proj | - | 요소들에 적용할 투영 |
반환값
true
범위 내 요소들이
comp
에 따라 정렬된 경우.
복잡도
first 와 last 사이의 거리에 선형적으로 비례합니다.
가능한 구현
struct is_sorted_fn { template<std::forward_iterator I, std::sentinel_for<I> S, class Proj = std::identity, std::indirect_strict_weak_order<std::projected<I, Proj>> Comp = ranges::less> constexpr bool operator()(I first, S last, Comp comp = {}, Proj proj = {}) const { return ranges::is_sorted_until(first, last, comp, proj) == last; } template<ranges::forward_range R, class Proj = std::identity, std::indirect_strict_weak_order< std::projected<ranges::iterator_t<R>, Proj>> Comp = ranges::less> constexpr bool operator()(R&& r, Comp comp = {}, Proj proj = {}) const { return (*this)(ranges::begin(r), ranges::end(r), std::ref(comp), std::ref(proj)); } }; inline constexpr is_sorted_fn is_sorted; |
참고 사항
ranges::is_sorted
는
true
를 빈 범위와 길이가 1인 범위에 대해 반환합니다.
예제
#include <algorithm> #include <array> #include <functional> #include <iostream> #include <iterator> int main() { namespace ranges = std::ranges; std::array digits {3, 1, 4, 1, 5}; ranges::copy(digits, std::ostream_iterator<int>(std::cout, " ")); ranges::is_sorted(digits) ? std::cout << ": sorted\n" : std::cout << ": not sorted\n"; ranges::sort(digits); ranges::copy(digits, std::ostream_iterator<int>(std::cout, " ")); ranges::is_sorted(ranges::begin(digits), ranges::end(digits)) ? std::cout << ": sorted\n" : std::cout << ": not sorted\n"; ranges::reverse(digits); ranges::copy(digits, std::ostream_iterator<int>(std::cout, " ")); ranges::is_sorted(digits, ranges::greater {}) ? std::cout << ": sorted (with 'greater')\n" : std::cout << ": not sorted\n"; }
출력:
3 1 4 1 5 : not sorted 1 1 3 4 5 : sorted 5 4 3 1 1 : sorted (with 'greater')
참고 항목
(C++20) |
가장 큰 정렬된 부분 범위를 찾습니다 (알고리즘 함수 객체) |
(C++11) |
범위가 정렬되어 있는지 확인합니다 (함수 템플릿) |