비교 함수가 엄격한 연산자 "<"가 아닌 경우 std::sort가 충돌하는 이유는 무엇입니까?
제공된 C 코드 조각은 다음을 보여줍니다. 잘못된 비교 함수로 인해 std::sort를 활용하는 동안 충돌이 발생합니다. std::sort는 엄격한 약한 순서 규칙을 충족하는 정렬기를 기대하므로 문제와 해결 방법을 자세히 살펴보겠습니다.
코드에서 A 구조체의 비교 함수는 a가 작거나 같은지 확인합니다. (<=) 다른 사람에게.a. 그러나 이는 엄격한 약한 순서 지정 규칙을 위반합니다.
엄격한 약한 순서 지정
엄격한 약한 순서 지정은 다음과 같은 관계를 정의합니다.
코드에서 비교 함수는 a가 other.a와 동일한 경우에도 true를 반환하므로 반대칭 속성을 만족하지 않습니다. 이는 무한 루프와 같은 std::sort의 비결정적 동작으로 이어질 수 있습니다.
해결 방법
문제를 해결하려면 비교 기능을 수정해야 합니다. 표시된 것처럼 a가 other.a보다 엄격하게 작은 경우에만 true를 반환하여 엄격한 약한 순서 규칙을 준수합니다. 아래:
struct A { bool operator <(const A& other) const { return a < other.a; // Return true only when a is strictly less than other.a } };
이 수정된 비교 기능은 엄격한 약한 순서 규칙이 준수되도록 보장하여 std::sort가 충돌 없이 예상대로 작동하도록 합니다.
위 내용은 비교 함수가 엄격하지 않을 때 `std::sort`가 충돌하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!