작성
·
133
0
bool cmp(pair a, pair b){
return a.first > b.first;
}
제가 알기론 bool은 1과 0으로 결과값이 나온다고 알고있습니다. 그러면 저기에서 1또는 0을 cmp에 넣어주는건가요?
2.sort(v.begin(), v.end(), cmp); 위의 코드에서 어떤 값을 cmp로 가져와서 어떻게 내림차순으로 바뀌는지 궁금합니다.원래 greater()만 내림차순이 되는걸로 알고있는데 어떻게 바뀌는건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
김우진님, 문의하신 cmp 함수와 정렬에 대해서 설명드리겠습니다.
bool cmp(pairreturn a.first > b.first;
는 a의 첫 번째 요소가 b의 첫 번째 요소보다 클 경우 true(1), 그렇지 않을 경우 false(0)를 반환합니다. 즉, 두 요소를 비교하여 참 또는 거짓을 반환하며, 이 반환값은 cmp 함수 자체에 직접 넣어주는 것이 아니라 sort 함수가 내부적으로 cmp 함수를 호출하여 반환값을 사용하게 됩니다.
sort 함수의 세 번째 인자자리에 cmp 함수를 전달하게 되면, sort 함수는 벡터 v를 정렬할 때 주어진 cmp 함수의 기준에 맞추어 정렬을 수행합니다. 이때 a.first > b.first
의 조건 때문에 벡터 v의 요소들은 first 값이 큰 순으로 내림차순으로 정렬되게 됩니다. greater<>
함수를 사용하는 것은 내장 비교함수를 사용하는 것이고, 사용자가 정의한 cmp 함수를 사용하는 경우엔 해당 함수의 반환 조건에 따라 정렬 기준이 결정됩니다.
질문하신 내림차순으로 정렬하는 과정을 예를 들어 설명하면 다음과 같습니다:
- v에 있는 요소들을 순서대로 비교하며 cmp를 호출합니다. 예를 들어 cmp(v[i], v[j])
가 호출되었다고 했을 때, 만약 v[i].first
가 v[j].first
보다 크다면 cmp는 true를 반환하고, sort는 v[i]를 v[j]보다 앞에 배치합니다.
- 이 과정을 반복하여 모든 요소들이 cmp 함수의 조건에 맞게 정렬됩니다.
위의 설명이 김우진님의 궁금증을 해소하는데 도움이 되셨길 바랍니다. 추가적으로 궁금한 점이 있다면 언제든지 질문 남겨주세요.
감사합니다.