qhvlq456   4년 전

이제막 STL공부하고 있는데요..

런타임 에러가 뜨는데 이유가 먼지 모르겠어서 질문드립니다

sort에서 에러 나는거 같은데 sort마지막 매개변수에 대해서 자세히 설명해주시면 너무 감사드릴거같습니다

솔직히 a > b 가 그냥 내림차순, a < b 가 오름차순으로 알고있는데 왼쪽이 더 클수 있도록 이라는말이 도무지 이해가 가질 않네요

설명해주시면 감사하겠습니다 ㅠㅠ 

bupjae   4년 전

예상하신 대로 runtime error 가 발생한 이유는 sort 함수를 호출할 때 올바르지 않은 cmp 를 매개변수로 넘겨주었기 때문입니다.

 

cmp 함수는 수학적으로 strict weak ordering 조건을 만족해야 합니다.

* cmp(a, a) == false

* 만약 cmp(a, b) == true 이면 cmp(b, a) == false

* 만약 cmp(a, b) == true 이고, 동시에 cmp(b, c) == true 이면 cmp(a, c) == true

여기에 추가로 equivalence relationship 에 대한 조건을 만족해야 합니다. 

더 자세히 알고 싶으시면 C++ Compare function object(링크) 를 참조하세요

 

실제로 작성하신 함수는 cmp("hh", "i") == true 이면서 cmp("i", "hh") == true 이기 때문에 두 번째 조건을 어기고 있습니다.

 

여러개의 조건으로 정렬하고 싶을때는 다음 형식을 따르면 됩니다.

qhvlq456   4년 전

너무 감사드립니다 ㅠㅠ!! 

댓글을 작성하려면 로그인해야 합니다.