Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

누에나방애벌레

C++에서 다양한 정렬 기능 활용하기 본문

공부/c++

C++에서 다양한 정렬 기능 활용하기

명석 2024. 7. 26. 09:02

정렬은 데이터를 정리하고 분석하는 데 있어 중요한 역할을 합니다. C++에서는 강력하고 유연한 정렬 기능을 제공하여 다양한 요구를 충족할 수 있습니다. 이번 포스트에서는 algorithm 헤더의 sort 함수를 중심으로 기본 정렬부터 커스텀 정렬까지 다양한 정렬 방법을 소개합니다.

기본 정렬

C++의 algorithm 헤더는 강력한 정렬 기능을 제공합니다. 기본적인 오름차순 정렬은 다음과 같이 사용할 수 있습니다:


#include <algorithm>
#include <vector>

int main() {
    std::vector<int> v = {5, 2, 8, 3, 1};
    std::sort(v.begin(), v.end());
    // v는 이제 {1, 2, 3, 5, 8}로 정렬됩니다.
}
 

내림차순 정렬

내림차순 정렬을 위해서는 greater<int>()를 사용하면 됩니다. 이는 기본적으로 제공되는 함수 객체로, 내림차순 비교를 수행합니다:

#include <algorithm>
#include <vector>
#include <functional>

int main() {
    std::vector<int> v = {5, 2, 8, 3, 1};
    std::sort(v.begin(), v.end(), std::greater<int>());
    // v는 이제 {8, 5, 3, 2, 1}로 정렬됩니다.
}

문자열 정렬

문자열을 정렬할 때는 아스키값을 기준으로 정렬됩니다. 이 경우 대소문자가 섞여 있으면 예상치 못한 결과가 나올 수 있으므로 주의가 필요합니다. 문자열 정렬 시 대소문자를 구분하지 않도록 하기 위해, 문자열을 모두 소문자 또는 대문자로 변환한 후 정렬하는 것이 좋습니다.

#include <algorithm>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> v = {"Banana", "apple", "Cherry"};
    std::sort(v.begin(), v.end());
    // v는 이제 {"Banana", "Cherry", "apple"}로 정렬됩니다. 아스키값 기준 정렬.
}

커스텀 정렬

커스텀 정렬은 사용자가 원하는 기준에 맞춰 데이터를 정렬할 수 있도록 합니다. 이를 위해 compare 함수를 정의하여 sort 함수에 전달할 수 있습니다.

예를 들어, 문자열의 길이를 기준으로 정렬하는 커스텀 정렬을 다음과 같이 구현할 수 있습니다:

#include <algorithm>
#include <string>
#include <vector>

bool compareLength(const std::string &a, const std::string &b) {
    return a.length() < b.length();
}

int main() {
    std::vector<std::string> v = {"Banana", "apple", "Cherry"};
    std::sort(v.begin(), v.end(), compareLength);
    // v는 이제 {"apple", "Banana", "Cherry"}로 정렬됩니다. 길이 기준 정렬.
}

람다식을 이용하여 더욱 간결하게 표현할 수도 있습니다:

#include <algorithm>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> v = {"Banana", "apple", "Cherry"};
    std::sort(v.begin(), v.end(), [](const std::string &a, const std::string &b) {
        return a.length() < b.length();
    });
    // v는 이제 {"apple", "Banana", "Cherry"}로 정렬됩니다. 길이 기준 정렬.
}

주의 사항

compare 함수에서 false를 반환한다고 해서 요소들을 무조건 바꾸라는 의미는 아닙니다. false는 단지 현재 비교가 틀렸음을 의미하며, 이를 통해 정렬 알고리즘이 다음 단계를 진행하게 됩니다. 이 과정에서 무한 루프가 발생하지 않도록 주의해야 합니다. 잘못된 비교 함수는 정렬을 불가능하게 만들 수 있습니다.


C++의 sort 함수는 매우 강력하고 유연하여 다양한 정렬 요구를 충족할 수 있습니다. 기본적인 오름차순 정렬부터 커스텀 정렬까지, 상황에 맞게 적절히 활용하여 효율적인 정렬을 수행해보세요.

'공부 > c++' 카테고리의 다른 글

C++ 비트 연산하기  (0) 2024.08.14
C++에서 변수+1 vs 변수++  (0) 2024.07.26
C++ Iterator  (0) 2024.07.25
C 언어의 cstring과 C++의 string  (0) 2024.07.25
C++ 배열과 벡터  (0) 2024.07.25