내가 STL에 조예가 깊어서 글을 남기는 것이
아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면
지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필
이번 항목에서는 정렬을 하고자 할때, 이용되는 sort 라는 함수들의 효율을 정확히 파악해 두어 사용하라는 것이다.
sort 알고리즘은
sort, stable_sort, partial_sort, nth_element, partition가 있고, 어떻게 사용하면 좋은지 정리해보자.
Sequence Container 이거나 배열이라는 조건 하에서
1. 전체 정렬을 할 때, sort 나 stable_sort
2. 상위 n개의 요소만 순서에 맞추어 뽑아내고자 할 때, partial_sort
3. 상위 n개의 요소를 뽑되 순서는 고려될 필요가 없을 때, nth_element
4. 어떤 기준에 맞는것과 안맞는것을 분류하고자 할 때, partition 이나 stable_partition
Associative Container 중 list Container 일 경우
멤버 함수 sort 를 사용하는게 좋고, partial_sort 나 nth_element 의 기능이 필요하다면 간접적으로 구현하는 방법밖에 없다고 필자는 말한다.
프로그래머라면 가장 적은 부하의 정렬 알고리즘 순서는 무엇일까? 생각하게 되는데 그 순서는
1. partition
2. stable_partition
3. nth_element
4. partial_sort
5. sort
6. stable_sort
이다.
그렇다고 이것은 절대적인게 아니다. 효율적으로 어떤 정렬 알고리즘을 사용하느냐에 따라 성능이 바뀔수 있기 때문이다.
이번 항목에서는 정렬을 하고자 할때, 이용되는 sort 라는 함수들의 효율을 정확히 파악해 두어 사용하라는 것이다.
sort 알고리즘은
sort, stable_sort, partial_sort, nth_element, partition가 있고, 어떻게 사용하면 좋은지 정리해보자.
Sequence Container 이거나 배열이라는 조건 하에서
1. 전체 정렬을 할 때, sort 나 stable_sort
2. 상위 n개의 요소만 순서에 맞추어 뽑아내고자 할 때, partial_sort
3. 상위 n개의 요소를 뽑되 순서는 고려될 필요가 없을 때, nth_element
4. 어떤 기준에 맞는것과 안맞는것을 분류하고자 할 때, partition 이나 stable_partition
Associative Container 중 list Container 일 경우
멤버 함수 sort 를 사용하는게 좋고, partial_sort 나 nth_element 의 기능이 필요하다면 간접적으로 구현하는 방법밖에 없다고 필자는 말한다.
프로그래머라면 가장 적은 부하의 정렬 알고리즘 순서는 무엇일까? 생각하게 되는데 그 순서는
1. partition
2. stable_partition
3. nth_element
4. partial_sort
5. sort
6. stable_sort
이다.
그렇다고 이것은 절대적인게 아니다. 효율적으로 어떤 정렬 알고리즘을 사용하느냐에 따라 성능이 바뀔수 있기 때문이다.
'책 정리 > Effective STL' 카테고리의 다른 글
항목 36 : copy_if를 적절히 구현해 사용하자 (0) | 2008.09.03 |
---|---|
항목 35 : 대소문자를 구분하지 않는 문자열 비교는 mismatch 아니면 lexicographical_compare를 써서 간단히 구현할 수 있다. (0) | 2008.09.03 |
항목 34 : 정렬된 범위에 대해 동작하는 알고리즘이 어떤 것들인지 파악해 두자 (0) | 2008.09.03 |
항목 33 : remove와 비슷한 알고리즘을 포인터의 컨테이너에 적용할 때에는 각별히 조심하자. (0) | 2008.09.02 |
항목 32 : 요소를 정말로 제거하고자 한다면 remove 류의 알고리즘에는 꼭 erase를 붙여 사용하자. (0) | 2008.09.02 |
항목 30 : 알고리즘의 데이터 기록 범위(destination range)는 충분히 크게 잡자 (0) | 2008.07.28 |
항목 29 : 문자 단위의 입력에는 istreambuf_iterator의 사용도 적절하다. (0) | 2008.07.27 |
항목 28 : reverse_iterator에 대응되는 기점 반복자(base iterator)를 사용하는 방법을 정확하게 이해하자. (1) | 2008.07.27 |
항목 27 : const_iterator를 iterator로 바꾸는 데에는 distance와 advance를 사용하자. (0) | 2008.07.27 |
항목 26: const_iterator나 reverse_iterator, const_reverse_iterator도 좋지만 역시 쓸만한 것은 iterator이다 (0) | 2008.07.26 |
최근댓글