강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

김우진님의 프로필 이미지
김우진

작성한 질문수

강의교재p81 cmp함수

작성

·

133

0

  1. 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 함수와 정렬에 대해서 설명드리겠습니다.

  1. bool cmp(pair a, pair b) 함수에서 return a.first > b.first; 는 a의 첫 번째 요소가 b의 첫 번째 요소보다 클 경우 true(1), 그렇지 않을 경우 false(0)를 반환합니다. 즉, 두 요소를 비교하여 참 또는 거짓을 반환하며, 이 반환값은 cmp 함수 자체에 직접 넣어주는 것이 아니라 sort 함수가 내부적으로 cmp 함수를 호출하여 반환값을 사용하게 됩니다.

  2. sort 함수의 세 번째 인자자리에 cmp 함수를 전달하게 되면, sort 함수는 벡터 v를 정렬할 때 주어진 cmp 함수의 기준에 맞추어 정렬을 수행합니다. 이때 a.first > b.first의 조건 때문에 벡터 v의 요소들은 first 값이 큰 순으로 내림차순으로 정렬되게 됩니다. greater<> 함수를 사용하는 것은 내장 비교함수를 사용하는 것이고, 사용자가 정의한 cmp 함수를 사용하는 경우엔 해당 함수의 반환 조건에 따라 정렬 기준이 결정됩니다.

질문하신 내림차순으로 정렬하는 과정을 예를 들어 설명하면 다음과 같습니다:
- v에 있는 요소들을 순서대로 비교하며 cmp를 호출합니다. 예를 들어 cmp(v[i], v[j])가 호출되었다고 했을 때, 만약 v[i].firstv[j].first보다 크다면 cmp는 true를 반환하고, sort는 v[i]를 v[j]보다 앞에 배치합니다.
- 이 과정을 반복하여 모든 요소들이 cmp 함수의 조건에 맞게 정렬됩니다.

위의 설명이 김우진님의 궁금증을 해소하는데 도움이 되셨길 바랍니다. 추가적으로 궁금한 점이 있다면 언제든지 질문 남겨주세요.

감사합니다.

김우진님의 프로필 이미지
김우진

작성한 질문수

질문하기