Ich würde gerne meine Liste std :: Liste je nach Parameter sortieren. Zum Beispiel:Sortieren einer Std :: Liste <myclass*> mit der Verwendung von Myclass :: Operator [] (Int i)
class myclass
{
string name, surname;
public:
myclass() {}
~myclass() {}
string operator[](int i)
{
switch (i)
{
case 1: return name;
case 2: return surname;
}
}
};
template <typename T>
struct compare
{
int num;
indirect_compare() {}
indirect_compare(int i) : num(i) {}
~indirect_compare() {}
bool operator()(T * lhs, T * rhs) { return (*lhs)[num] < (*rhs)[num]; }
};
list<myclass*> lst;
int specified_by_user;
cin >> specified_by_user;
//later
lst.sort(compare<myclass>(specified_by_user));
Es funktioniert gut für mich, aber ich bin mir nicht sicher, ob es korrekt ist. Als ich eine Nachricht in Konstruktor und Destruktor im Strukturvergleich hinzufügte, sah ich, dass der Konstruktor nur einmal aufgerufen wurde, aber der Destruktor wurde zum Beispiel 9 Mal aufgerufen, und ich habe keine Ideen, warum es passiert ist. Ich habe versucht, dieses Programm zu debuggen, um es zu überprüfen, aber ich konnte den Grund nicht finden.
Vielen Dank für Hilfe im Voraus!
Die anderen Konstrukteuren war wahrscheinlich die Kopie Ctor. Hast du das beobachtet? – Sheph
Compare's ctor und dtor heißt indirect_compare. Wird das Beispiel kompiliert? Befreien Sie sich auch von den Argumenten, wenn es ungültig ist. – Sheph
'nicht sicher, ob es korrekt ist 'sieht für mich richtig aus, es gibt ein paar verschiedene Möglichkeiten, aber deins ist nicht falsch – vu1p3n0x