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; }