본문 바로가기
프로그래밍 언어/C++

C++ 객체 정렬

by Jo_Wick 2025. 11. 5.
반응형

 

1. operator<

  • 클래스 내부에서 < 기준 정의
  • operator<는 말 그대로 클래스(객체)에서 < 연산자를 직접 정의하는 함수이다.
    즉, “이 객체가 다른 객체보다 작은가?”를 판단하는 기준을 직접 정하는 함수라고 생각하면 된다.
  • 애초에 STL에서 정렬(sort)을 실행할 때 '<'으로 비교하기 때문에 '<'을 다시 재정의 한다고 생각하면 된다.
#include <iostream>
#include <string>
using namespace std;

struct Person {
    string name;
    int age;

    // < 연산자 오버로딩
    bool operator<(const Person& other) const {
        return age < other.age;  // 나이 기준 비교
    }
};

int main() {
    Person a{"Alice", 25};
    Person b{"Bob", 30};

    cout << (a < b) << endl;  // true (25 < 30)
}

 

 

2. 람다 함수

  • 이름 없는 즉석 함수
  • [ ] 안에서 외부 변수 캡처 가능
  • 비교 기준을 임시로 바꾸고 싶을 때 편리
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

struct Person {
    string name;
    int age;
};

int main() {
    vector<Person> v = {
        {"Alice", 30},
        {"Bob", 25},
        {"Charlie", 30}
    };

    // 이름 기준 오름차순
    sort(v.begin(), v.end(), [](const Person& a, const Person& b) {
        return a.name < b.name;
    });

    cout << "[이름 기준 정렬 결과]\n";
    for (auto &p : v)
        cout << p.name << ' ' << p.age << '\n';

    cout << '\n';

    // 나이 기준 내림차순
    sort(v.begin(), v.end(), [](const Person& a, const Person& b) {
        return a.age > b.age;
    });

    cout << "[나이 기준(내림차순) 정렬 결과]\n";
    for (auto &p : v)
        cout << p.name << ' ' << p.age << '\n';
}

 

 

3. 일반 함수

  • 비교 함수를 별도로 만들어 재사용 가능
  • STL에서 요구하는 형태(const T&)를 지키는 게 안전
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;

struct Person {
    string name;
    int age;
};

// 커스텀 비교 함수 (나이 기준 오름차순)
bool compareByAge(const Person& a, const Person& b) {
    return a.age < b.age; // a가 더 어리면 true
}

int main() {
    vector<Person> v = {
        {"Alice", 30},
        {"Bob", 25},
        {"Charlie", 27}
    };

    // compareByAge 함수를 정렬 기준으로 사용
    sort(v.begin(), v.end(), compareByAge);

    for (auto &p : v)
        cout << p.name << ' ' << p.age << '\n';
}

 

 

const가 붙는 이유

sort() 같은 STL 알고리즘const 참조를 요구할 수 있다.

예를 들어 STL 내부는 원소를 복사하거나 참조할 때 const T&접근할 때가 많아서 비교 함수읽기만 하는 함수로 만드는게 안전하다.

반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

C++ mutable  (0) 2025.11.03
C++ 람다함수 심화편  (0) 2025.11.03
C++ 람다함수 기본편  (0) 2025.10.31
C++ struct와 class의 차이  (0) 2025.10.04
C++ string compare 사용법  (0) 2025.10.01

댓글