[C++/Algorithm] STL : Sort

정건희·2024년 11월 8일

STL/알고리즘

목록 보기
3/10

1. SWEA_1208 : Flatten 문제 풀던 중

입력받은 map을 정렬하지 않고 그냥 풀려고 했는데
연산이 굉장히 복잡해지는 것을 경험함..

그 결과로 STL 의 Sort 메소드 사용을 고려하기 전에
스터디한 내용을 적어 보는 글입니다.


2. 사용법

sort()함수는 기본적으로 오름차순 정렬을 수행하는데,
배열의 시작점 주소와 마지막 주소 +1을 적어주면 됨.

#include <iostream>
#include <algorithm>
using namespace std;
int main(void) {
	int a[10] = { 9, 3, 5, 4, 1, 10, 8, 6, 7, 2 };
	sort(a, a + 10);
	for (int i = 0; i < 10; i++) {
        cout << a[i] << " ";
	}
}

만약 배열의 시작부터 끝까지 적지 않았다면?
예를 들어서 시작점 + 2부터 마지막 주소 +1까지 적었다면?
그러면 해당 주소들 제외하고는 정렬되지 않는다.


3. sort()함수의 숨겨진 부분

정렬 기준을 원하는 형태로 설정할 수 있다는 점

compare()함수를 다음과 같이 반환값을 큰(Greater)으로 바꿔주면 내림차순 정렬로 변환됨. 크다는 것의 기준은 '왼쪽이 오른쪽에 비해서'를 기준으로 삼음

데이터 비교 시, 실무에서 내무적으로 여러 변수를 정렬하는 방법을 적용한 예시

#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("나동빈", 90),
      Student("나동빈", 90),
      Student("나동빈", 90),
      Student("나동빈", 90),
      Student("나동빈", 90)
  };
  sort(students, students + 5);
  for (int i = 0; i < 5; i++) {
      cout << students[i].name << ' ';
  }
}

0개의 댓글