Ich muss Fibonacci-Heap in meinem Projekt verwenden und ich versuche, es aus Boost-Bibliothek zu verwenden. Aber ich kann nicht herausfinden, wie man eine benutzerdefinierte Vergleichsfunktion für einen beliebigen Datentyp einrichtet. Ich brauche einen Heap für struct min Knoten definiert zu konstruieren, wie folgt:Definieren der Vergleichsfunktion für Fibonacci Heap in Boost
struct node
{
int id;
int weight;
struct node* next;
/* dist is a global array of integers */
bool operator > (struct node b) //Boost generates a Max-heap. What I need is a min-heap.
{return dist[id] < dist[b.id] ? 1:0 ;} //That's why "<" is used for "operator >".
bool operator < (struct node b)
{return dist[id] > dist[b.id] ? 1:0 ;}
bool operator >=(struct node b)
{return dist[id] <= dist[b.id] ? 1:0 ;}
bool operator <=(struct node b)
{return dist[id] >= dist[b.id] ? 1:0 ;}
node()
{
id=0;
weight=0;
next=NULL;
}
};
ich die Dokumentation nachgeschlagen, und es gab eine Vergleichs Klasse. Aber es enthielt kein Element. Bitte sagen Sie mir, wie Sie eine benutzerdefinierte Vergleichsfunktion einrichten. Vielen Dank im Voraus.
Wie haben Sie angegeben, ob dieser Operator für einen Vergleich verwendet wird, der kleiner oder größer ist? Ich meine, wie haben Sie sich entschieden, "<" anstatt ">" zu verwenden? Die Wahl wird sich ändern, ob der Heap min Heap oder Max Heap richtig ist? – cauthon14
@ user2011038 Ja, es wird sich ändern. Ich habe dazu '' 'so geändert, dass du dadurch einen Min-Heap bekommst. – Yuushi