Potrzebuję używać sterty Fibonacciego w moim projekcie i próbuję użyć go z biblioteki boost. Ale nie mogę dowiedzieć się, jak skonfigurować funkcję porównywania zdefiniowaną przez użytkownika dla dowolnego typu danych. Muszę skonstruować stertę min dla węzła struktury zdefiniowaną następująco:Definiowanie funkcji porównania dla sterty Fibonacci w boostu
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;
}
};
Sprawdziłem dokumentację i była klasa porównania. Ale nie zawierało żadnego elementu. Proszę mi powiedzieć, jak skonfigurować funkcję porównywania zdefiniowaną przez użytkownika. Z góry dziękuję.
jak określiłeś, czy użyć tego operatora dla porównania mniejszego czy większego? Mam na myśli, jak zdecydowałeś się użyć "<" zamiast ">"? Wybór zmieni się, czy stertą jest minimalna sterta, czy maksymalna ilość sterty w prawo? – cauthon14
@ user2011038 Tak, zmieni to. Zmodyfikowałem do niego '>', aby dać ci minimalny stos. – Yuushi