is_sorted는 데이터셋이(컨테이너나 배열) 정렬되어 있다면 true를 반환하고, 그렇지 않다면 false를 반환 합니다.
is_sorted_until는 데이터셋에서 정렬되어 있지 않는 요소의 첫 번째 위치를 반환합니다.
is_sorted와 is_sorted_until의 원형은 아래와 같습니다.
is_sorted
template<class ForwardIterator>
bool is_sorted( ForwardIterator _First, ForwardIterator _Last );
template<class ForwardIterator, class BinaryPredicate>
bool is_sorted( ForwardIterator _First, ForwardIterator _Last, BinaryPredicate _Comp );
is_sorted_until
template<class ForwardIterator>
ForwardIterator is_sorted_until( ForwardIterator _First, ForwardIterator _Last);
template<class ForwardIterator, class BinaryPredicate>
ForwardIterator is_sorted_until( ForwardIterator _First, ForwardIterator _Last,
BinaryPredicate _Comp );
위의 is_sorted와 is_sorted_until의 원형을 보시면 알겠지만 조건자(함수객체)를 사용하는 버전과 사용하지 않는 버전 두 가지가 있습니다.
조건자를 사용하지 않는 경우 기본으로 operator<가 적용됩니다.
프로그래머는 코드로 이해하죠? ^^ 그럼 바로 예제 코드 들어갑니다.
이번 예제는 간단하게 만들기 위해 정수 배열을 사용해 보았습니다. 아마 STL을 이제 막 공부하고 있는 분들은 알고리즘을 STL의 컨테이너에만 사용할 수 있는 것으로 알고 있는 분들도 있을텐데 그렇지 않습니다. 아래 예제는 int 형 배열을 사용하였습니다.
< 예제 코드 >
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int Numbers1[5] = { 1, 2, 3, 4, 5 };
int Numbers2[5] = { 5, 4, 3, 2, 1 };
int Numbers3[5] = { 1, 2, 4, 3, 5 };
bool IsResult = false;
IsResult = is_sorted( &Numbers1[0], &Numbers1[5], [](int x, int y) { return x < y; } );
cout << "Numbers1. 오름 차순 ? " << IsResult << endl;
IsResult = is_sorted( &Numbers2[0], &Numbers2[5], [](int x, int y) { return x > y; } );
cout << "Numbers2. 내림 차순 ? " << IsResult << endl;
IsResult = is_sorted( &Numbers3[0], &Numbers3[5], [](int x, int y) { return x < y; } );
cout << "Numbers3. 오름 차순 ? " << IsResult << endl;
cout << endl;
cout << "is_sorted에서 조건자(함수객체)를 생략한 경우 " << IsResult << endl;
IsResult = is_sorted( &Numbers1[0], &Numbers1[5] );
cout << "Numbers1의 is_sorted의 결과는 ? " << IsResult << endl;
IsResult = is_sorted( &Numbers2[0], &Numbers2[5] );
cout << "Numbers2의 is_sorted의 결과는 ? " << IsResult << endl;
cout << endl;
int Numbers4[8] = { 1, 2, 3, 5, 4, 5, 7, 8 };
int* NumIter = is_sorted_until( &Numbers4[0], &Numbers4[5], [](int x, int y) { return x < y; } );
cout << "Numbers4에서 정렬되지 않은 첫 번째 위치의 값 : " << *NumIter << endl;
return 0;
}
< 결과 >
'C++0x' 카테고리의 다른 글
[STL] 12. <algorithm>에 추가된 새로운 함수들 iota (0) | 2011.05.19 |
---|---|
[STL] 11. <algorithm>에 추가된 새로운 함수들 is_heap, is_heap_until (0) | 2011.05.11 |
[STL] 9. <algorithm>에 추가된 새로운 함수들 is_partitioned, partition_point (1) | 2011.04.19 |
STL을 아직 공부하지 않으신 분들은 이 글들을 참고하세요 (0) | 2011.04.19 |
[STL] 8. <algorithm>에 추가된 새로운 함수들 - partition_copy (2) | 2011.04.12 |