[C++] STL sort() 함수

비아베·2024년 1월 15일

c++ / STL

목록 보기
2/7

지난 포스트에서는 정렬에 대해서 다루었다. 이번에는 C++ STL sort() 함수에 대해서 알아보겠다.

sort() 함수의 기본 사용법

  • sort함수는 c++의 alogorithm 헤더에 포함되어있다. 아래의 코드는 예시이다.
#include <iostream>
#include<algorithm>
using namespace std;

int main(){
    int num[4] = {0,8,3,7};
    sort(num, num+4);
    //만약 vector를 사용할 경우에는 벡터의 시작과 끝까지의 범위를 정렬해야한다.
    //sort(num.begin(), num.end());
    for(int i = 0; i<4; i++){
        cout << num[i] << " ";
    }
}

위의 코드처럼 sort함수는 기본적으로 오름차순을 수행하고 위와 같이 배열의 시작점 주소와 마지막 주소 +1를 적으면 된다. 총 4개의 원소가 있는 배열 num을 정렬해준다.

vector를 사용했을 시에는 begin()과 end() 함수를 사용하면 된다. 벡터의 시작과 끝을 편하게 쓸 수 있다.

내림차순

만약 내림차순으로 정렬을 진행하고 싶다면 아래의 코드처럼 작성하면 된다.

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

bool compare(int a; int b){
	return a>b;
    //본래는 return a<b; 이다.
}

int main(){
    int num[4] = {0,8,3,7};
    sort(num, num+4, compare);
    //만약 vector를 사용할 경우에는 벡터의 시작과 끝까지의 범위를 정렬해야한다.
    //sort(num.begin(), num.end());
    for(int i = 0; i<4; i++){
        cout << num[i] << " ";
    }
}

위 소스 코드는 기본적인 sort 함수의 숨겨진 부분을 가지고 와 다시금 설정한 것이다. sort 함수의 좋은 이유는 정렬의 기준을 자신이 원하는 형태로 설정할 수 있다는 것이다. compare 함수를 만들어 sort()의 세번째 인자 값으로 넣게 되면, 해당 함수의 반환 값에 맞게 정렬한다.

데이터를 묶어서 정렬하는 법

단순한 데이터 정렬 기법은 실무에서 사용하기에는 좋지 않다. 실무에서는 프로그래밍할 때 모든 데이터들이 객체로 정리되어 내부적으로 여러 개의 변수를 포함하고 있기 때문이다. 가장 중요한 정렬 방식은 '특정한 변수를 기준으로' 정렬하는 것이다.

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

class Student{
public:
    string name;
    int score;
    Student(string name, int score){
        this -> name = name;
        this -> score = score;
    }
    // 정렬 기준을 클래스 내에 정의
    bool operator < (Student &student) {
		return this->score < student.score;
	}

};
//내림차순
bool compare(int a, int b){
    return a > b;
}

int main(void){
    Student students[] ={
        Student("홍길동", 70),
        Student("김바람", 83),
        Student("유수수", 68),
        Student("이람", 95),
        Student("홍이이", 93)
    };
    sort(students, students+5);

    for(int i =0; i<5; i++){
        cout << students[i] << endl;
    }

}

위 코드는 점수를 기준으로 학생을 정렬해서 이름을 출력하는 것이다. 이렇게 sort 함수를 사용할 수 있다.

profile
게임 개발자 기술블로그

0개의 댓글