Heim  >  Artikel  >  Backend-Entwicklung  >  Wie deklariere ich die Prioritätswarteschlange mit dem benutzerdefinierten Komparator in C korrekt, um Fehler zu vermeiden?

Wie deklariere ich die Prioritätswarteschlange mit dem benutzerdefinierten Komparator in C korrekt, um Fehler zu vermeiden?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 07:48:30205Durchsuche

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

Deklarieren eines benutzerdefinierten Komparators für eine Prioritätswarteschlange in C

Bei der Arbeit mit Prioritätswarteschlangen in C ist es wichtig, benutzerdefinierte Komparatoren zum Definieren zu verwenden die Logik zur Priorisierung von Elementen. Das Deklarieren einer Prioritätswarteschlange mit einem benutzerdefinierten Komparator kann jedoch manchmal zu Fehlern führen.

Ein solcher Fehler tritt auf, wenn die Deklaration versucht, die Komparatorfunktion als Typnamen in den Vorlagenargumenten zu verwenden. Wenn Sie beispielsweise eine Komparatorfunktion bool Compare(Node a, Node b) haben und Ihre Prioritätswarteschlange wie folgt deklarieren:

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

Sie werden auf die Fehlermeldung „Compare“ ist kein Typname stoßen. Dieser Fehler ist auf die falsche Verwendung des Funktionsnamens „Vergleichen“ als Typ zurückzuführen. Der richtige Weg, den Komparator anzugeben, besteht darin, ihn in eine Inline-Lambda-Funktion einzuschließen oder eine Klasse zu erstellen, die den Operator() überlädt.

Um die Lösung mithilfe einer Inline-Lambda-Funktion zu veranschaulichen, können Sie Ihre Deklaration wie folgt umschreiben :

<code class="cpp">priority_queue<Node, vector<Node>, std::function<bool(Node, Node)>> openSet([](Node a, Node b){ return a.compareTo(b); });</code>

Alternativ können Sie eine Klasse für den Komparator und den Überladungsoperator() wie folgt erstellen:

<code class="cpp">class Compare {
public:
    bool operator()(Node a, Node b){
        return a.compareTo(b);
    }
};

priority_queue<Node, vector<Node>, Compare> openSet;</code>

Stellen Sie sicher, dass die Komparatorklasse/-funktion std::function< erfüllt ;bool(Knoten, Knoten)> Signatur, und der Code sollte erfolgreich kompiliert werden. Dieser Ansatz stellt sicher, dass die Prioritätswarteschlange mithilfe eines benutzerdefinierten Komparators korrekt deklariert wird, sodass Sie Elemente basierend auf Ihrer definierten Logik effektiv priorisieren können.

Das obige ist der detaillierte Inhalt vonWie deklariere ich die Prioritätswarteschlange mit dem benutzerdefinierten Komparator in C korrekt, um Fehler zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn