>  기사  >  백엔드 개발  >  C에서 사용자 정의 비교기를 사용하여 우선순위 대기열을 올바르게 선언하는 방법은 무엇입니까?

C에서 사용자 정의 비교기를 사용하여 우선순위 대기열을 올바르게 선언하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-24 14:05:02323검색

How to Correctly Declare a Priority Queue with a Custom Comparator in C  ?

사용자 지정 비교기를 사용하여 C에서 우선순위 대기열 선언

C에서 우선순위 대기열을 작업할 때 사용자 지정 비교기 함수를 사용하여 선언하려고 하면 오류가 발생할 수 있습니다. 이러한 오류의 원인을 살펴보고 사용자 정의 비교기를 사용하여 우선순위 대기열을 선언하는 올바른 방법을 찾아보겠습니다.

잘못된 선언: 원인 및 해결 방법

말씀하신 대로 우선순위를 선언하려고 합니다. 다음 코드가 포함된 대기열은 오류를 유발합니다.

<code class="cpp">priority_queue<Node, vector<Node>, Compare> openSet;</code>

첫 번째 오류("비교는 유형 이름이 아닙니다")의 이유는 비교가 유형, 특히 연산자를 재정의하는 클래스일 것으로 예상되기 때문입니다. () 기능. 이 문제를 해결하려면 Compare라는 클래스를 만들고 그 안에 연산자()를 오버로드해야 합니다.

두 번째 오류("expected a >'")는 Compare` 함수가 a로 올바르게 지정되지 않은 경우 발생합니다. 유형. 이 문제를 해결하려면 선언을 다음과 같이 수정하세요.

<code class="cpp">priority_queue<Node, vector<Node>, Compare::Compare> openSet;</code>

여기서 Compare::Compare는 Compare 클래스 내에서 Operator() 함수를 명시적으로 지정합니다.

대체 선언 옵션

사용자 정의 비교기를 사용하여 우선순위 대기열을 선언하는 다른 방법이 있습니다:

std::function:

<code class="cpp">priority_queue<Node, vector<Node>, std::function<bool(Node, Node)>> openSet(Compare);</code>

decltype 및 Lambda 사용 표현:

<code class="cpp">decltype(Compare) myComparator = Compare;
priority_queue<Node, vector<Node>, decltype(Compare)> openSet(myComparator);</code>

위 내용은 C에서 사용자 정의 비교기를 사용하여 우선순위 대기열을 올바르게 선언하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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