Werte aus einem vector<double> einlesen und in Map schreiben

stevecmr

Grünschnabel
Ich lese eine Vector und daraus will ist ein map bauen


Z.B

ich habe folgende vector:
0.2 0.4 0.5 0.5 25 0.4 0.5 0.01 0.2 0 0.3 0.01 0.05 0.24 25 0.02 0.03 0.05 0.002 25 0.1 0.4 0.5 0.6 25


und will das unterstehende Darstellung haben, wobei 25 und 0 am Ende der Zeilen das Label bzw. Key sind. Ich will Zeile Anhang deren Key gruppieren

0.2 0.4 0.5 0.5 25
0.3 0.1 0.5 0.4 25
0.1 0.4 0.5 0.6 25
0.2 0.3 0.5 0.2 0
0.4 0.5 0.1 0.2 0

Also hier ist mein Code:
Code:
    // Zu lesende Datei oeffnen
    ifstream input("data.txt");

    // Ueberpruefung ob Datei geoeffnet wurde
    if(!input) {
                          cerr << "Datei wurde nicht gefunden." << endl;
                          return EXIT_FAILURE;
                    }

       vector<double> dvec;
      double wert;

      // Inhalt der Datei Zahl fuer Zahl einlesen
      while(input >> wert)

        // Fuegt zuletzt eingelesenen Wert einem Vektor hinzu
        dvec.push_back(wert);

	int label ;

	map<int,vector<double> > label_kandidaten;

	int labelcount = dvec.size()/5;
	
	for(size_t i = 1; i <= labelcount; i++)
	{
			label = dvec[i*5];

			for(size_t j = 5*(i -1); j <= 5*i; j++)
			{		
		         	label_kandidaten[label].push_back(dvec[j]);		
			}
         }

leider bekomme ich nicht das richtige Ergebnis.
Kann jemand mir dabei helfen?

Viele Grüße
 
Zuletzt bearbeitet:
Moin,

auch wenn Dein Code ohne Code-Tags nur schwer zu lesen ist, würde ich mal vorschlagen, Deine Map-Deklaration anzupassen! ! !

Streiche: map<int,vector<double> > label_kandidaten;
Setze: map<int,double> label_kandidaten;

Und dann nur entsprechend die einzelnen Werte eintragen! :rolleyes:

Gruß
Klaus
 
Moin,

auch wenn Dein Code ohne Code-Tags nur schwer zu lesen ist, würde ich mal vorschlagen, Deine Map-Deklaration anzupassen! ! !

Streiche: map<int,vector<double> > label_kandidaten;
Setze: map<int,double> label_kandidaten;

Und dann nur entsprechend die einzelnen Werte eintragen! :rolleyes:

Gruß
Klaus



Mit folgende Initialisierung, kann es nicht funktionieren, ich muss die werte irgendwo speichern. Deswegen brauche ich diese Vector<double>

Viele Güße
Steve
 
Hi.

@stevemcr: Verwende bitte die Code Tags. Dein Beitrag ist eigentlich unzumutbar. Wieso gibst du dir keine Mühe beim erstellen deiner Beiträge?

Es ist nicht verwunderlich wenn du dann wenig Antworten bekommst bzw. die Antworten nicht adäquat sind da niemand solche Beiträge liest.

Gruß
 
Hallo Steve,

das tust Du doch - und zwar in der map - oder besser in einer multimap! ! ! :confused:

Ist Dir klar, was der Container map überhaupt ist?
* Eine map<Key,Value> verwalten Schlüssel-Wert-Paare <Key,Value>. Jedem Schlüssel ist dabei ein anderer Wert zugeordnet.
* Die multimap<Key,Value> kann mehrere Werte dem gleichen Schlüssel zuordnen.

Code:
Bespiel :
map<string, int>     multimap<string, int> 
                              Meier   6135
    Meier   6135              Meier   6134
    Meyer   9999              Meyer   9999
    Schulze 5180              Schulze 5180
Wenn ich Dich richtig verstehe, willst Du doch Deine 25 double-Werte über Deine 5 Label ordnen, oder ?
Also wäre in Deinem die mutimap<int,double> genau passend! Auf den Key (int) stehen Deine 5 Label und auf Value dann die jeweilgen Werte ....... :rolleyes:

Gruß
Klaus
 
Es tut leider noch nicht was ich will, mit der Key= 0 und 25 sollte man in der Lage sein die Zeilen zu sortieren. Z.B alle Zeile die mit 25 enden, werden zuerst betrachten dann die mit 0 endet.
Für meine Aufgabe habe ich insgesamt über 1500 Zeilen und jede Zeile hat 256 Einträge
Viele Grüße
Steve
 
Hi.

Ja, es sieht besser aus - außer die Einrückung.

Für deinen Anwendungsfall bräuchtest du eine Map von Double auf Vektoren von Vektoren von Double (falls du die Reihenfolge der gelesenen Werte beibehalten willst):
C++:
map< double, vector< vector<double> > >  label_kandidaten;
Gruß
 
Hallo deepthroat,
meine obige Implementierung speichern schon die Werte aber ich schätze nicht an der Richtige Stellen. Ich habe versucht die labelswerte auszugeben, leider kommen nicht die zu erwarteten Werte raus.
Viele Grüße
 
Hi.

Also erstmal stimmt die Grenze bei der inneren Schleife nicht. Es muß von (i-1)*5 bis (i*5)-1 gehen oder sogar nur bis (i*5)-2 da man sich den letzten Eintrag auch sparen könnte.

Evtl. stimmt auch deine Ausgaberoutine nicht.

Gruß
 

Neue Beiträge

Zurück