>백엔드 개발 >C++ >내 `std::sort`가 충돌하는 이유는 무엇입니까? (그리고 해결 방법)

내 `std::sort`가 충돌하는 이유는 무엇입니까? (그리고 해결 방법)

Susan Sarandon
Susan Sarandon원래의
2024-12-14 16:22:14761검색

Why Does My `std::sort` Crash?  (And How to Fix It)

std::sort로 인한 컴파일러 충돌 이해

C 표준 라이브러리 함수인 std::sort는 데이터 정렬에서 중요한 역할을 합니다. 구조. 그러나 모든 비교 함수가 std::sort에서 예상대로 작동하는 것은 아니며 잠재적으로 프로그램 충돌이 발생할 수 있습니다.

다음 코드 조각을 고려하세요.

#include <algorithm>

struct A
{
    int a;
};

bool compare(const A& a, const A& b)
{
    return a.a <= b.a; // Corrected from original code (<)
}

int main()
{
    A coll[8];
    std::sort(&coll[0], &coll[8]);
}

문제:

원본 코드에서 비교 함수는 a.a <= b.a를 사용하여 요소를 비교합니다. 동일한 요소가 정렬된 것으로 간주되도록 허용합니다. 이는 std::sort에서 요구하는 엄격한 약한 순서 지정 규칙을 위반합니다.

해결책:

엄격한 약한 순서 지정 규칙에 따르면, 요소 A, B, C를 순서대로 사용하려면 다음 조건을 충족해야 합니다. 보류:

  • A < B, 이어서 B > A.
  • A < B 및 B< C, A < C.
  • A는 자신과 같을 수 없습니다(예: A != A).
  • 원래 비교 함수 비교는 A가 다음과 같을 수 있도록 허용하므로 이 규칙을 만족하지 않습니다. std::sort 내에서 무한 루프가 발생할 수 있습니다. 이 문제를 해결하려면 비교 기능을 위 코드 조각에 표시된 수정된 버전으로 교체해야 합니다.

    위 내용은 내 `std::sort`가 충돌하는 이유는 무엇입니까? (그리고 해결 방법)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.