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


Anmelden zum Antworten