Vector bei index füllen
-
Hi zusammen,
möchte die Inhalte meines Vectors1 nach dem Datum sortieren.
Mein Vector1 sieht folgendermaßen aus:
std::vector<Klasse> VectorListen; VectorListen.push_back(Speicherklasse(Datetime, String, String, Double, String)); ...
jetzt habe ich mir folgendes gedacht:
-> erstellen eines neuen VectorSortierer
-> Die Größe des neuen VectorSortierer= Größe VectorListen
->Dann:int count = 0; std::vector<Speicherklasse>::iterator iterators = VectorListen.begin(); while( iterators != VectorListen.end() ) { TDateTime dtime = StrToDateTime(iterators->gibDatum()); std::vector<Speicherklasse>::iterator iteratorsort = VectorListen.begin(); while (iteratorsort!= VectorListen.end()) { TDateTime dtimeneu = StrToDateTime(iteratorsort->gibDatum()); if(dtime>dtimeneu) count++; iteratorsort++; } VectorSortierer[count] = Speicherklasse(iterators->gibDatum(),iterators->gibArt(),iterators->gibGeldart(),iterators->gibBetrag(),iterators->gibBeschreibung()); count=0; iterators++; }
ADer vergleich funktioniert auch super, bloß geht die Zeile:
VectorSortierer[count] = Speicherklasse(iterators->gibDatum(),iterators->gibArt(),iterators->gibGeldart(),iterators->gibBetrag(),iterators->gibBeschreibung());
nicht!!hat jemand eine Idee?
Danke Bench
-
Warum sortierst Du nicht mit std::sort und definierst operator< in Deiner Speicherklasse (oder was auch immer sort für braucht) oder gibst ihm ein StrictWeakOrdering-comparer mit?
-
Ok, klingt gut!!!
Meine Klasse sieht wie folgt aus:#include "Speicherklasse.h" __fastcall Speicherklasse::Speicherklasse(AnsiString datum, AnsiString art, AnsiString geldart, AnsiString betrag, AnsiString beschreibung) { sdatum = datum; sart = art; sbetrag = betrag; ibetrag = StrToFloat(betrag); sbeschreibung = beschreibung; sgeldart = geldart; } void __fastcall Speicherklasse::SchreibeninDatei(TStringList *ListenAktivlist) { ListenAktivlist->Add(sdatum+"\n"+sart+"\n"+sgeldart+"\n"+sbetrag+"\n"+sbeschreibung); } AnsiString Speicherklasse::gibDatum() { return sdatum; } AnsiString Speicherklasse::gibArt() { return sart; } AnsiString Speicherklasse::gibBetrag() { return sbetrag; } double Speicherklasse::gibintBetrag() { return ibetrag; } AnsiString Speicherklasse::gibBeschreibung() { return sbeschreibung; } AnsiString Speicherklasse::gibGeldart() { return sgeldart; }
wie kann ich das dann realisieren?
Kannst du mir vielleicht ein kleines Beispiel posten?danke
-
Hallo,
Warum hat deine Klasse keinen Copykonstruktor? Warum verwendest du nicht einfach sort mit Hilfe eines entsprechneden Prädikats oder Vergleichsoperators für deine Klasse?
bool operator<(const Speicherklasse& lhs, const Speicherklasse& rhs) { return lhs.gibDatum() < rhs.gibDatum(); } // dann irgendwann std::sort(VectorListen.begin(), VectorListen.end());
[edit]Hab wohl etwas lange gebraucht.
, Einen CopyCtor brauchst du ja nicht selbst definieren. Du kannst ihn aber benutzen.[edit]
-
Hi,
wow!
Geile sache!
Funzt perfekt!
Danke bench