nicht über die Prioritätswarteschlange Sachen sicher, weil ich nie, aber es benutzt habe eine gerade Art zu tun, können Sie dies tun:
class A
{
friend struct ComparePtrToA;
public:
A(int v=0):a(v){}
private:
int a;
};
struct ComparePtrToA
{
bool operator()(A* a1, A* a2) {return a1->a < a2->a;}
};
#include <vector>
#include <algorithm>
int _tmain(int argc, _TCHAR* argv[])
{
vector<A*> someAs;
someAs.push_back(new A(1));
someAs.push_back(new A(3));
someAs.push_back(new A(2));
sort(someAs.begin(), someAs.end(), ComparePtrToA());
}
Beachten Sie die Speicherlecks, dies ist nur ein Beispiel ...
Weiterer Hinweis: Dies ist keine Implementierung der Prioritätswarteschlange! Der Vektor ist nur ein Beispiel für die Verwendung des Funktors, den ich erstellt habe, um zwei Objekte über ihre Zeiger zu vergleichen. Obwohl mir bewusst ist, was eine Prioritätswarteschlange ist und wie sie funktioniert, habe ich nie die STL-Funktionen verwendet, die sie implementieren.
Update: Ich denke TimW macht einige gültige Punkte. Ich weiß nicht, warum er so oft abgelehnt wurde. Ich denke, meine Antwort verbessert werden kann wie folgt:
class A
{
public:
A(int v=0):a(v){}
bool operator<(const A& rhs) { return a < rhs.a; }
private:
int a;
};
struct ComparePtrToA
{
bool operator()(A* a1, A* a2) {return *a1 < *a2;}
};
, die sauberer ist (vor allem, wenn Sie einen Container von Werten berücksichtigen zu müssen, anstatt Zeigern - keine weiteren Arbeiten erforderlich wären).
Ich kann wirklich nicht folgen. Ich gebe Ihnen die Antwort mit einer zusätzlichen Trennung der Bedenken und ich bekomme 2 Stimmen. Warum muss MyClass wissen, dass es mit dem Zeiger verglichen wird? Was ist mit open-closed-Prinzip, was werden Sie tun, wenn Sie entscheiden, dass Sie auch eine Std :: priority_que von Werttypen anstelle von Zeigern benötigen. – TimW