[C++ STL] Sort

2021. 4. 13. 23:34

1. Sort ?

  • 퀵 정렬 (quick sort) 기반으로 구현된 함수, O(nlogn)
  • sort(first, last) - [first, last) 범위의 원소를 정렬 (default는 오름차순)

 

2. 사용법

2.1 오름차순/내림차순 정렬

#include <algorithm>

int arr[10] = {3, 7, 2, 4, 1, 0, 9, 8, 5, 6};
vector<int> v;
v.push_back(3);
v.push_back(7);
v.push_back(2);

// 오름차순 정렬
sort(arry, array+10);
sort(v.begin(), v.end());
sort(v.begin(), v.end(), less<int>());

// 내림차순 정렬
sort(v.begin(), v.end(), greater<int>());

 

2.2 사용자 정의 기준 정렬

Compare

// Student 클래스 정의
class Student{
public:
    string name;
    int age;
    Student(string name, int age):name(name),age(age){}
    
};


bool compare(Student a, Student b){
    if(a.name == b.name){   //이름이 같으면, 나이 기준 오름차순 정렬
        return a.age < b.age;
    }else{                  //이름 다르면, 이름 기준 사전순 정렬
        return a.name < b.name;
    }
}

sort(v.begin(), v.end(), compare);	// compare 함수 기준 정렬

 

Operator overloading (연산자 오버로딩)

class Student{
public:
    string name;
    int age;
    Student(string name, int age):name(name),age(age){}
    
    //연산자 오버로딩(operator overloading)
    bool operator<(Student s) const{  
        if(this->name == s.name){
            return this->age < s.age;	// 나이 기준 오름차순 정렬
        }else{
            return this->name < s.name;	// 이름 기준 사전순 정렬
        }
    }
};

sort(v.begin(), v.end());

+ Recent posts