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

Hi deepthroat,

Ich habe die Grenzwerte angepasst und leider ich bekomme nicht die gewünschte labelwerte. Wie sollte ich sonst die Ausgabefktion schreiben ?
Ich bin schon verzweifelt.

Viele Grüße
Steve
 
Hi.

Z.B. so:
C++:
#include <map>
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
	typedef map<int, vector<double> > maptype;

	maptype label_kandidaten;

	ifstream file("data.txt");

	if (!file.is_open()) {
		cerr << "could not open file.";
		return 1;
	}
	
	// Werte einlesen:

	vector<double> vec;
	
	copy(istream_iterator<double>(file), istream_iterator<double>(), back_inserter(vec));

	clog << "size: " << vec.size() << endl;

	// Werte in Map speichern

	// check: assert(vec.size() % 5 == 0);

	for (vector<double>::const_iterator it = vec.begin(), end = vec.end();
		 it != end; ++it)
	{
		vector<double>::const_iterator beg(it);
		
		advance(it, 4);

		vector<double>& v = label_kandidaten[static_cast<int>(*it)];

		copy(beg, it, back_inserter(v));
	}

	// Werte ausgeben:

	for (maptype::const_iterator it = label_kandidaten.begin(), end = label_kandidaten.end();
		 it != end; ++it) 
	{
		const int key = it->first;
		const vector<double>& v = it->second;

		for (vector<double>::const_iterator vi = v.begin(), ve = v.end();
			 vi != ve; advance(vi, 4)) 
		{
			copy(vi, vi + 4, ostream_iterator<double>(cout, " "));
			cout << key << endl;
		}
	}
	
    return 0;
}
Wäre allerdings die Frage warum du erstmal die Daten komplett in einen vector speicherst. Das könnte man auch gleich in die map einlesen...

Gruß
 
Hallo deepthroat,
Vielen danke, es funktioniert prima. Ich habe noch eine Frage, zwar wie soll ich vorgehen wenn ich die Datei in 2 Klassen ( vektoren oder sogar File ) aufteilen will. Ich will zB. einer Klasse die nur aus Zeilen mit der Label = 25 und die andere Klasse mit der label = 0 haben.
Danke im Voraus

Steve
 
Hi.
Hallo deepthroat,
Vielen danke, es funktioniert prima. Ich habe noch eine Frage, zwar wie soll ich vorgehen wenn ich die Datei in 2 Klassen ( vektoren oder sogar File ) aufteilen will. Ich will zB. einer Klasse die nur aus Zeilen mit der Label = 25 und die andere Klasse mit der label = 0 haben.
Ich verstehe deine Frage nicht. Du hast die Datei doch schon nach dem Label aufgeteilt und in der Map gespeichert... :confused:

Falls du nur die beiden Klassen haben willst und andere Records mit einem anderen Label als 0 bzw. 25 nicht beachten willst, dann ignorier die doch einfach. Ansonsten solltest evtl. mal näher erläutern was du da überhaupt machen willst.

Gruß
 
Hi deepthroat,
Ich will das gesamt Datei in 2 vector bzw File aufteilen. Der vector v0 sollte nur die Zeile mit der label 0 enthalten und vector v25 nur die mit der label 25.

Gruß
Steve
 
Hi.
Hi deepthroat,
Ich will das gesamt Datei in 2 vector bzw File aufteilen. Der vector v0 sollte nur die Zeile mit der label 0 enthalten und vector v25 nur die mit der label 25.
Das ist doch aber mehr als simpel.

Dann machst du halt eine Fallunterscheidung und speicherst die entsprechenden Elemente nicht in map[0] sondern in v0 bzw. nicht in map[25] sondern in v25.

Gruß
 

Neue Beiträge

Zurück