STL 정렬 기능을 사용하여 목록 정렬
목록에 사용자 정의 구조체의 개체가 포함된 경우 내림차순으로 목록 정렬을 구현하는 것이 어려울 수 있습니다. 그러나 발생한 문제인 "'__last - __first'에서 '연산자-'와 일치하지 않음"은 선택한 정렬 접근 방식에 더 깊은 문제가 있음을 드러냅니다.
제공된 SortDescending 구조체는 두 연산자를 비교하기 위한 연산자를 올바르게 정의합니다. 하지만 그 능력에 따라 그렇게 합니다. t2.pow < t1.pow. 그러나 이 비교는 표준 정렬 기능과 호환되지 않습니다.
문제는 std::sort가 목록 반복자가 제공하지 않는 임의 액세스 반복자를 필요로 한다는 사실에서 비롯됩니다. std::list와 같은 양방향 반복자를 사용하면 목록을 이동할 수 있지만 직접 액세스 또는 포인터 연산을 수행하는 데 필요한 기능이 부족합니다.
STL 정렬 기능을 사용하여 목록을 정렬하려면 무작위로 액세스 반복자를 사용할 수 있어야 합니다. 또 다른 접근 방식은 std::list::sort 멤버 함수를 사용하는 것입니다. 이 함수는 비교기 함수를 인수로 받아들여 사용자 정의 정렬 기준을 정의할 수 있습니다.
귀하의 경우 다음 코드는 용어의 힘에 따라 내림차순으로 목록을 정렬합니다.
Result.poly.sort([](const term& t1, const term& t2) { return t1.pow > t2.pow; });올바른 반복자와 적절한 정렬 기능을 사용하면 원하는 순서로 목록을 효과적으로 정렬할 수 있습니다.
위 내용은 `std::sort` 및 사용자 정의 비교기를 사용하여 목록을 내림차순으로 정렬할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!