is_heap과 is_heap_until는 앞서 소개했던 is_sorted, is_sorted_until과 비슷한 알고리즘입니다. 차이가 있다면 is_heap과 is_heap_until는 정렬이 아닌 Heap을 다룬다는 것만 다릅니다.
is_heap은 데이터셋이 Heap으로 되어 있는지 아닌지, is_heap_until는 데이터셋에서 Heap이 아닌 요소의 첫 번째 위치를 반환합니다.
is_heap
template<class RandomAccessIterator>
bool is_heap(
RandomAccessIterator _First,
RandomAccessIterator _Last
);
template<class RandomAccessIterator, class BinaryPredicate>
bool is_heap(
RandomAccessIterator _First,
RandomAccessIterator _Last,
BinaryPredicate _Comp
);
is_heap_until
template<class RandomAccessIterator>
bool is_heap_until(
RandomAccessIterator _First,
RandomAccessIterator _Last
);
template<class RandomAccessIterator, class BinaryPredicate>
bool is_heap_until(
RandomAccessIterator _First,
RandomAccessIterator _Last,
BinaryPredicate _Comp
);
is_heap과 is_heap_until는 각각 조건자를 사용하는 버전과 사용하지 않는 버전 두 개가 있습니다. 조건자를 사용하지 않는 경우는 operator< 를 사용합니다.
그럼 is_heap과 is_heap_until을 사용한 아주 간단한 예제 코드를 봐 주세요^^
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int Numbers1[10] = { 50, 25, 20, 7, 15, 7, 10, 2, 1, 3 };
int Numbers2[10] = { 50, 25, 20, 7, 15, 7, 10, 6, 11, 3 };
int Numbers3[10] = { 50, 25, 20, 7, 15, 16, 12, 3, 6, 11 };
bool IsResult = false;
IsResult = is_heap( &Numbers1[0], &Numbers1[10], [](int x, int y) { return x < y; } );
cout << "Numbers1는 Heap인가 ? " << IsResult << endl;
IsResult = is_heap( &Numbers2[0], &Numbers2[10], [](int x, int y) { return x < y; } );
cout << "Numbers2는 Heap인가 ? " << IsResult << endl;
IsResult = is_heap( &Numbers3[0], &Numbers3[10] );
cout << "Numbers3는 Heap인가 ? " << IsResult << endl;
cout << endl;
int* NumIter = is_heap_until( &Numbers2[0], &Numbers2[10], [](int x, int y) { return x < y; } );
cout << "Numbers2에서 Heap되지 않은 첫 번째 위치의 값 : " << *NumIter << endl;
return 0;
}
< 결과 >
ps : 자료구조 Heap에 대해서 잘 모르시는 분들은 아래의 글을 참고해 주세요
http://blog.naver.com/ctpoyou/105423523
'C++0x' 카테고리의 다른 글
[STL] 13. <algorithm>에 추가된 새로운 함수들 minmax_element (0) | 2011.05.30 |
---|---|
[STL] 12. <algorithm>에 추가된 새로운 함수들 iota (0) | 2011.05.19 |
[STL] 10. <algorithm>에 추가된 새로운 함수들 is_sorted, is_sorted_until (1) | 2011.04.25 |
[STL] 9. <algorithm>에 추가된 새로운 함수들 is_partitioned, partition_point (1) | 2011.04.19 |
STL을 아직 공부하지 않으신 분들은 이 글들을 참고하세요 (0) | 2011.04.19 |