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를 리턴하는 규칙으로 정렬한다.return truereturn 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 : 주소
👉 “주소 → 값”
| 기호 | 의미 |
|---|---|
&x | x의 주소 |
*p | p가 가리키는 값 |
priority_queue<T, Container, Compare>
vector<T>, 같으면 생략 가능)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