> 백엔드 개발 > C++ > 비교 함수가 엄격하지 않을 때 `std::sort`가 충돌하는 이유는 무엇입니까?

비교 함수가 엄격하지 않을 때 `std::sort`가 충돌하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-29 09:12:15
원래의
879명이 탐색했습니다.

Why Does `std::sort` Crash When the Comparison Function Isn't a Strict

비교 함수가 엄격한 연산자 "<"가 아닌 경우 std::sort가 충돌하는 이유는 무엇입니까?

제공된 C 코드 조각은 다음을 보여줍니다. 잘못된 비교 함수로 인해 std::sort를 활용하는 동안 충돌이 발생합니다. std::sort는 엄격한 약한 순서 규칙을 충족하는 정렬기를 기대하므로 문제와 해결 방법을 자세히 살펴보겠습니다.

코드에서 A 구조체의 비교 함수는 a가 작거나 같은지 확인합니다. (<=) 다른 사람에게.a. 그러나 이는 엄격한 약한 순서 지정 규칙을 위반합니다.

엄격한 약한 순서 지정

엄격한 약한 순서 지정은 다음과 같은 관계를 정의합니다.

  • 무반사적: a는 자신과 관련될 수 없습니다(a ≱ a).
  • 전이형: a가 b와 관련되고 b가 c와 관련되면 a는 c와 관련됩니다.
  • 반대칭 : a가 b와 관련되고 b가 a와 관련되면 a는 b와 같습니다(a ≒ b).

코드에서 비교 함수는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿