Custom comparator voor priorityqueue

Status
Niet open voor verdere reacties.

morfanaion

Gebruiker
Lid geworden
10 okt 2007
Berichten
43
Op dit moment ben ik voor een schoolopdracht bezig om het Dijkstra-algoritme te implementeren. Hierbij moet ik verplicht gebruiken van priority_queue. Deze priority_queue vul ik op dit moment met pointers naar een Vertex. Nu heeft de priority_functie een methode nodig om deze Vertices te vergelijken. Omdat je niet gewoon kunt zeggen V1 > V2, wil ik graag weten hoe ik in priority_queue een eigen functie kan meegeven voor het vergelijken. Iemand enig idee?
 
ik snap even niet wat je nou precies wilt.

wat is een priority_queue? en welke vertex classe gebruik je?
 
Ik weet niet precies hoe een priority_queue werkt.. Maar als je 2 vectoren wilt vergelijken waarvan je pointers in die queue hebt staan zou je misschien zo kunnen doen:

Code:
class vertex
{
    public:
        bool operator <(vertex& v){ if(value < v.value){ return true; } else{ return false; } }
        bool operator >(vertex& v){ if(value > v.value){ return true; } else{ return false; } }
        bool operator ==(vertex& v){ if(value == v.value){ return true; } else{ return false; } }
        
        int value;
};

en dan een zo'n pointer vergelijken met een andere pointer:
Code:
if(*(myQueue[0]) < *(myQueue [3])){ cout << "vertex 1 is smaller than vertex 4.\n"; }

Ik hoop dat je er iets aan hebt..
 
Laatst bewerkt:
Je bent op zoek naar 'operator overloading'. Zoek daar maar eens op. (in het geval van het controleren zou je een functie kunnen schrijven die een bool als return waarde geeft)

Code:
bool operator*=(const string a, const string b)
{
    if(a.length() == b.length()) return true;
    else return false;
}

//
string a = "hallo", b = "doei";
if(a *= b) cout << "a *= b -> true" << endl;
else       cout << "a *= b -> false" << endl;

Bovenstaande is een stom voorbeeld waarmee je met de operator *= kunt controleren of de lengte van twee strings gelijk aan elkaar zijn.
 
het overloaden van de operators was niet het probleem, dat had ik namelijk al gedaan. Het bleek ook niet aan de vergelijking te liggen maar aan het feit dat reeds in de priority_queue ingevoerde data wijzigde. Hier kan priority_queue niet mee omgaan, met als gevolg dat ik een debug assertion failure kreeg.

De te overloaden operators zijn overigens > < <= en >=

Wanneer dit gedaan is kan in principe simpelweg een greater<datatype> als comporator worden meegegeven voor de priority_queue.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan