[effective STL] 항목 34 : 정렬된 범위 동작 알고리즘들
2016. 3. 19. 16:26ㆍ프로그래밍/Effective STL
728x90
728x90
기본적으로 정렬된 데이터를 넘겨 동작하는 알고리즘들이 있다는 이야기.
binary_search, lower_bound, upper_bound, equal_range
: 반드시 정렬된 데이터. 내부적으로 이진 탐색을 사용해 값을 찾는다.
set_union, set_intersection, set_difference, set_symmetric_difference
: 기본적으로 선형시간으로 동작하지만 정렬하지 않은 데이터는 터무니 없이 느리다.
merge, inplace_merge
: 두 정렬된 범위를 받아 합치는 알고리즘으로 하나라도 정렬되지 않으면 동작하지 않는다.
includes
: 어떤 범위 안에 값이 있는지 여부를 알아보는 알고리즘. 정렬되어 있음을 가정하고 동작한다.
기본적으로 선형시간이지만 정렬되어 있지 않다면 느리다.
unique, unique_copy
: 표준안 - 연속으로 이어진 동일한 요소들 중에서 첫 번째 것만을 남기고 다 없앤다.
그래서 정렬해야한다.
주의
1 2 3 4 5 6 | sort(v.begin(), v.end(), greater<int>()); .. bool isExists5 = binary_search(v.begin(), v.end(), 5); bool isExists5UsingGreater = binary_search(v.begin(), v.end(), 5, greater<int>()); | cs |
실제 binary_search를 할 때 이전 sort에서 사용한 비교 함수와 같은 것을 사용해야 한다는 것이다.
5라인 처럼 아무것도 쓰지 않으면 기본 요소를 오름차순으로 검색하기때문에 정상적인 결과가 안 나올 수 있다.
6라인 처럼 sort시 사용한 비교 함수를 명시해주면 정상적으로 동작한다.
728x90
반응형
'프로그래밍 > Effective STL' 카테고리의 다른 글
[effective STL] 항목 33 : remove 같은 알고리즘 사용할 때 포인터 컨테이너 주의 (0) | 2016.02.29 |
---|---|
[effective STL] 항목 32 : 요소 정말로 제거하기 (2) | 2016.02.28 |
[effective STL] 항목 31 : 정렬시 선택 사항들을 제대로 파악 (2) | 2016.02.27 |
[effective STL] 항목 30 : 알고리즘의 데이터 기록 범위는 충분히 크게 잡자. (0) | 2016.02.20 |
[effective STL] 항목 28 : reverse_iterator 쓸 때 base() 잘 쓰기 (0) | 2016.02.19 |
[effective STL] 항목 27 : const_iterator -> iterator는 distance와 advance를 사용하자. (2) | 2016.02.15 |
[effective STL] 항목 26 : 여러 iterator 중 쓸만한 것은 결국 iterator (2) | 2016.02.10 |