2 Vektoren zueinander sortieren



  • Hallo erstmal,

    ich habe 2 vektoren

    vector <string> DatumNEU;
    vector <int>    AnzahlNEU;
    

    ich würde jetzt gerne mit

    sort(DatumNEU.begin(),DatumNEU.end())
    

    den code sortieren aber so das der AnzahlNEU mitgenommen wir wie bekomm ich das hin

    also immer jeder Stelle in DatumNEU gehört zur genau gleichen stelle in AnzahlNeu

    Ich habe halt tonnen datumeinträge und in Anzahl immer die dazugehörige Seitenanzahl

    Ich mache dann nacher mit summenfunktionen eine Summe/tag und würde aber gerne davor noch sortieren denn dann muss ich bei der summenformel immer nur schauen

    zahl[stelle] == zahl[stelle+1]
    

    dann weiter sonst net

    würde mich freuen ihr gebt mir paar tips

    danke



  • Warum hast du die Daten überhaupt auf zwei Vektoren verteilt? Wenn sie zusammengehören, solltest du sie auch zusammenpacken - in einen einzelnen vector<pair<string,int> >.



  • CStoll schrieb:

    Warum hast du die Daten überhaupt auf zwei Vektoren verteilt? Wenn sie zusammengehören, solltest du sie auch zusammenpacken - in einen einzelnen vector<pair<string,int> >.

    oder als map<string, int>...

    Gruß,

    Simon2.



  • So sehr kannt ich mich damit net aus ^^

    ich glaube sowiso das auch meine summenbildung wehsentlich schöner geht

    aber naja wie kann ich denn dann so nen pair oder so ne map sorieter, das alle nach datum sortiert werden und anzahl mit geht ??

    was macht pair genau versteh das noch net ganz is das nen 2 dimensionalen vector ??

    danke ^^



  • und wie greif ich dann nur auf die einzelne zahl oder auf das einzelne datum aus dem pair zu ??

    kannst du da mal nen beispiel machen danke



  • std::pair<int, std::string> p(42, "Die Antwort");
    std::cout << p.first << ": " << p.second << std:.endl;
    

    So oder so ähnlich ging das 🤡

    Um schnell eben sowas wie das hier nachzuschlagen ist
    http://cppreference.com
    empfehlenswert.



  • hier is mal mein kompletter code

    ich habe mir eh vorgestellt die summenabfrage umzuschreiben

    das immer das aktuelle datum weggespeichert wird dann die ganze liste nach dem datum durchgeschaut wird summe der anzahlen und adnach alle einträge mit dem datum gelöscht werden

    kann ich in einem vector löschen einzelne zeilen ??

    wenn ja was passiert mit dem rest rutsch das dann auf ?

    also sagen wir ich hab nen vector mit 50 zeilen

    ich lösch zeile 10 is dann da wo vorher zeile 10 war nun die 11 oder wie läuft das

    auserdem wie geht der befehl zum zeile löschen ^^

    hier der code

    /*
    Programm:		Druckdateien Auswerten
    Zweck:			Dieses Programm nimmt 2 Dateien, legt sie zusammen, und wertet die Summen nach Datum aus
    Autor:			Matthias Kroll
    erstellt:		25.06.07
    geändert:		
    */
    
    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <vector>
    #include <time.h>		//Für das aktuelle Datum
    #include <fstream>      // Für die Dateihandles
    #include <algorithm>     // für das Sortieren des fertigen Vectors
    
    using namespace std;
    
    // Globale Variablen
    string Dateipfad;
    vector <string> Datum;
    vector <int> Anzahl;
    vector <string> DatumNEU;
    vector <int>    AnzahlNEU;
    
    void ausgeben()
    {
    cout << "ALTE: \n";     
    for (int i = 0; i != Datum.size(); i++)
    {
        cout << "Datum: " << Datum[i] << " Anzahl: " << Anzahl[i] << endl;
    }
    
    cout << "\n\nNEUE: \n";
    for (int i = 0; i != DatumNEU.size(); i++)
    {
        cout << "Datum: " << DatumNEU[i] << " Anzahl: " << AnzahlNEU[i] << endl;
    } 
    }
    
    // Funktion zum löschen von allen chars vor dem letzten backslash und nach dem letzten .
    string pfad_ermitteln(char* argv[])
    {
        string parameter = argv[0];
    
        // Hier alles nach dem letzten punkt
        string backslash = "\\";
        int backslash_position = parameter.rfind(backslash);
        //ab der punkt_position bis .size also zum ende löschen, das die dateiendung wegfällt
        parameter.erase (backslash_position+1, parameter.size()-backslash_position);    
    
        return parameter;
    }
    
    string textbearbeiten (string zeile)
    {
         string zeile2;
         string zwischenspeicher1;
         string zwischenspeicher2;  
         string zwischenspeicher3;  
    
         int stelle = zeile.find("Job Log");
         int stelle2 = zeile.find("Seitenbeschreibungssprache"); 
         if ((stelle > -1) | (stelle2 > -1))
         {
         }    
         else
         {   // 3 mal löschen sodas wir als erstes unsere Anzahl seiten dort stehen haben
             for(int i = 0; i != 3; i++)
             {
                 int komma = zeile.find(",");
                 zeile.erase (0, komma+2); // Hier immer vom anfang bis komma und +1 weil das komma und blank danach selbst auch
             }
             // Seitenzahl Zwischenspeichern
             int komma = zeile.find(",");
             zeile2 = zeile;
             zwischenspeicher1 = zeile2.erase (komma, (zeile.size() - komma));
             Anzahl.push_back(atoi(zwischenspeicher1.c_str()));
    
             // 19 mal löschen sodas wir als erstes unser Datum dort stehen haben
             for(int i = 0; i != 19; i++)
             {
                 int komma = zeile.find(",");
                 zeile.erase (0, komma+2); // Hier immer vom anfang bis komma und +1 weil das komma und blank danach selbst auch
             }
             // Datum Zwischenspeichern
             komma = zeile.find(",");
             zeile2 = zeile;
             zwischenspeicher2 = zeile2.erase (komma, (zeile.size() - komma));
             zwischenspeicher3 = zwischenspeicher2.erase (zwischenspeicher2.find(" "), (zwischenspeicher2.size()-zwischenspeicher2.find(" ")));      
             Datum.push_back(zwischenspeicher3);
         }
    }
    
    void vectorenbearbeiten()
    {
    
         int AnzahlZusammen = 0;
    
         if (Anzahl.size() != Datum.size()) { cout << "FATAL ERROR - UNGLEICH DATUM UND ZAHLEN" << endl; getch(); }
         else
         {
             // ersten Datum eintrag machen
             string datumspeicher = Datum[0];
    
             // NOCH ZU ÜBERDENKEN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
             for (int i = 0; i != Datum.size(); i++)  
             {   
    
                 if(Datum[i] == datumspeicher && i != (Datum.size()-1))
                 {
                     AnzahlZusammen = AnzahlZusammen + Anzahl[i];
                 }
                 else
                 {
                     if (i == (Datum.size()-1))
                     {
                         AnzahlZusammen = AnzahlZusammen + Anzahl[i];  
                     }
    
                     // Die 2 Speicher in die neuen Vektoren pushen 
                     DatumNEU.push_back(datumspeicher);
                     AnzahlNEU.push_back(AnzahlZusammen);
    
                     cout << "Datum: " << datumspeicher << " Summen: " << AnzahlZusammen << endl;
    
                     // Speicher aktuallisieren
                     datumspeicher = Datum[i];
                     AnzahlZusammen = Anzahl[i];
    
                 } 
    
             }  
         }
    }
    
    void vectoreninoutputfile()
    {
         string zielpfad = Dateipfad + "\\" + "Bearbeitet_Gesamt.csv";     
         ofstream outputfile(zielpfad.c_str()); 
    
         int radix = 10; // 2=bin, 8=octal, 10=dez, 16=hex
         char buffer[100];
         string zeilefuersoutputfile;
    
         cout << " da bin ich " << endl;
         getch();
    
         if (AnzahlNEU.size() != DatumNEU.size()) { cout << "FATAL ERROR - UNGLEICH DATUMNEU UND ZAHLENNEU" << endl; getch(); }
         else
         {
             for (int i = 0; i != DatumNEU.size(); i++)  
             {
                 zeilefuersoutputfile = DatumNEU[i] + ";" + itoa(AnzahlNEU[i],buffer,radix) + "\n";
                 outputfile<<zeilefuersoutputfile;
             }   
         }
    
         outputfile.close();
    }
    
    void dateibearbeiten(int argc, char* argv[])
    {
        int zaehler = 1;
    
        while (zaehler < argc)
        {   
        fstream inputfile(argv[zaehler]); 
    
        string zeile;
    
            while (getline(inputfile,zeile))
            { 
              textbearbeiten(zeile);                                                                                   
            }
    
        zaehler ++;
        inputfile.close(); 
        }
    
        ausgeben();  
    }
    
    int main (int argc, char* argv[])
    {
        if(argc == 1)
        {
        cout << "Es wurden keine Parameter mitgegeben - Programm Ende" << endl;
        getch();
        exit (-1);
        }
    
        // Hier wird der Standort der exe ermittelt; der Dateipfad
        Dateipfad = pfad_ermitteln(argv);
    
        //Hier wird zuerst zusammengelegt dann getrennt und alles auser Datum + Druckseiten gelöscht 
        dateibearbeiten(argc, argv);  
    
        // Hier werden beide Vectoren bearbeitet also zusammengefasst nach datum
        vectorenbearbeiten();
    
        // Hier werden beide Vectoren in das outputfile geschrieben mit ; dazwischen
        //vectoreninoutputfile();   
    
        getch();
        return 0;   
    }
    

Anmelden zum Antworten