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