>백엔드 개발 >C++ >`std::sort` 및 사용자 정의 비교기를 사용하여 목록을 내림차순으로 정렬할 수 없는 이유는 무엇입니까?

`std::sort` 및 사용자 정의 비교기를 사용하여 목록을 내림차순으로 정렬할 수 없는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-20 16:53:28495검색

Why Can't I Sort a List in Descending Order Using `std::sort` and a Custom Comparator?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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