Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++에서 날짜 배열을 정렬하는 방법 완벽 가이드

날짜 정보를 담고 있는 배열이 있을 때, 이를 C 또는 C++ 코드로 정렬하려면 어떻게 해야 할까요? 이 글에서는 날짜 배열을 효율적으로 정렬하는 방법을 단계별로 살펴봅니다.

기본 개념

날짜 데이터는 클래스에 저장합니다(C 언어에서는 구조체(struct)를 사용할 수 있습니다). 정렬에는 C++ STL에서 제공하는 sort 함수를 활용하며, 날짜끼리 비교하려면 연도 → 월 → 일 순서로 우선순위를 판단하는 사용자 정의 비교 함수(compare function)를 직접 작성해야 합니다.

예제 코드

#include<iostream>
#include<algorithm>
using namespace std;

class Date {
    public:
        int d, m, y;
};

bool compare(const Date &date1, const Date &date2){
    if (date1.y < date2.y)
        return true;
    if (date1.y == date2.y && date1.m < date2.m)
        return true;
    if (date1.y == date2.y && date1.m == date2.m && date1.d < date2.d)
        return true;
    return false;
}

void sortDateArray(Date arr[], int n) {
    sort(arr, arr+n, compare);
}

int main() {
    Date arr[] = {{20, 1, 2017},
                  {25, 3, 2010},
                  { 3, 12, 1956},
                  {18, 10, 1982},
                  {19, 4, 2011},
                  { 9, 7, 2013}};
    int n = sizeof(arr)/sizeof(arr[0]);
    sortDateArray(arr, n);
    cout << "Sorted dates are" << endl;
    for (int i=0; i<n; i++) {
        cout << arr[i].d << " " << arr[i].m << " " << arr[i].y << endl;
    }
}

실행 결과

Sorted dates are
3 12 1956
18 10 1982
25 3 2010
19 4 2011
9 7 2013
20 1 2017

코드 설명

비교 함수 compare는 두 날짜 객체를 인자로 받아 다음 순서로 판단합니다.

1. 연도(year) 비교: 첫 번째 날짜의 연도가 더 작으면 참(true)을 반환합니다.
2. 월(month) 비교: 연도가 같다면 월을 비교하여 첫 번째 날짜의 월이 더 작으면 참을 반환합니다.
3. 일(day) 비교: 연도와 월이 모두 같다면 일을 비교하여 첫 번째 날짜의 일이 더 작으면 참을 반환합니다.
4. 위 조건에 해당하지 않으면 거짓(false)을 반환합니다.

sortDateArray 함수는 STL의 sort 함수에 배열의 시작 주소와 끝 주소, 그리고 앞서 만든 비교 함수를 전달하여 배열 전체를 오름차순으로 정렬합니다. 실행 결과를 보면 1956년부터 2017년까지 날짜가 시간순으로 올바르게 정렬된 것을 확인할 수 있습니다.