[C++] sort, &, *, ->, ., pq 분해

Nitroblue 1·2026년 1월 7일

Computer Science Basics

목록 보기
18/20
sort(events.begin(), events.end(), [](const auto& a, const auto& b) {
    if (a.first != b.first) return a.first < b.first;
    return a.second < b.second; // -1 < +1 이므로 종료가 먼저
});
  • events.begin(), events.end() : 정렬할 구간(벡터 전체)
  • [](const auto& a, const auto& b) { ... } : 비교 함수(Comparator)
    • std::sort는 내부에서 원소 두 개 a, b를 꺼내 a가 b보다 앞에 와야 하면 true를 리턴하는 규칙으로 정렬한다.
    • 즉, a가 b보다 앞이면 return true
    • a가 b보다 아이 아니면(b가 a보다 앞이거나 같음) return false

  • 람다 [](...){...} ?
    • [] : 캡처 리스트
    • (const auto& a, const auto& b) : 비교할 두 원소를 참조로 받으며, evnets의 원소 타입을 자동 추론하게 한다.
      • 즉, bool cmp(const pair<int, int>& a, const pair<int, int>& b) { ... }와 같다.

pg->num_vertices == (*pg).num_vertices : ->* + .의 축약형이다.

(A) 메모리/포인터 차원 : &, *
(B) 객체/멤버 접근 차원 : ., ->

이 둘은 역할이 완전히 다르다.

(A)는 “메모리 주소”를 다룬다.

& : 주소를 얻는다
int x = 10;
int* p = &x;

x : 값 10

  • &x : x가 어디에 있는지 주소
    👉 “값 → 주소”
  • * : 주소를 따라가서 값을 본다 (역참조)
    *p = 20; (그 주소에 있는 실제 값)

p : 주소
👉 “주소 → 값”

기호의미
&xx의 주소
*pp가 가리키는 값

pq in C++

priority_queue<T, Container, Compare>

  • T : 저장할 원소의 타입
  • Container : 내부에서 사용할 컨테이너 (기본은 vector<T>, 같으면 생략 가능)
  • Compare : 우선순위 비교 기준

ex) priority_queue<int, vector<int>, greater<int>>

  • greater<int> : 비교 함수 객체, a가 b보다 크면 true. 이걸 comparator로 쓰면 작은 값이 더 높은 우선순위를 갖게 됨. -> Min Heap!

ex) priority_queue<int> pq; : comparator가 less<int>라서 큰 값이 먼저 나옴 -> Max Heap

0개의 댓글