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가 다음과 같을 수 있도록 허용하므로 이 규칙을 만족하지 않습니다. std::sort 내에서 무한 루프가 발생할 수 있습니다. 이 문제를 해결하려면 비교 기능을 위 코드 조각에 표시된 수정된 버전으로 교체해야 합니다.
위 내용은 내 `std::sort`가 충돌하는 이유는 무엇입니까? (그리고 해결 방법)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!