Überschreiben eines Containers

Hallo zusammen ich habe folgendes Problem:
Ich hole mir eine id die ich dan vergleiche mit allen ids in einer liste, wenn ich die richtige id gefunden habe , hole ich mir die dazugehörigen andern werte.

So nun will ich diese daten in einer neuen liste speichern :
Allerdings wird hier nie ein neues Element gespeichert sondern immer das 1 überschrieben hab leider ka warum ;(
Deklarationen
Code:
	set <Daten> daten1set;
//Classe Daten
	Daten Datenliste1;
set <Daten> tempset;
	Daten templiste;
	int tempid;


Code:
	do
	{
			
			int vergleich;
			float verpreis;
			string vername;
		
		cout << "Geben Sie die Artikelnummer ein: ";
		cin >> tempid;
		if(tempid <= 0) break;

		
			for(set<Daten>::iterator x=daten1set.begin();x !=daten1set.end();x++)
		{
	
			
			if (tempid==x->Get1())
			
			{
				vergleich=x->Get1();
				verpreis=x->Get3();
				vername=x->Get2();
				
		 
			}
		}


		
			
	
	
			templiste.Set(vergleich,vername,verpreis);
            Daten *bla = new Daten(templiste);
            tempset.insert(*bla);break;

	
	} while( tempid != 0 );
und hier ist die "Prozedur"


Und hier die Methoden
Code:
void Daten::Set(int x_id,string x_name,float x_preis)
{
		id=x_id;
		name=x_name;
		preis=x_preis;

}

int Daten::Get1()const
{

	return(this->id);

}
string Daten::Get2()const
{

	return(this->name);

}

float Daten::Get3()const
{

	return(this->preis);

}
bitte um hilfe muss das für ne Klausur wissen ;(
 
Zuletzt bearbeitet:
Hi.

Am besten du postest mal den kompletten Code der Daten Klasse.

Um Elemente in einem Set zu speichern benötigt man eine Ordung für diese Elemente, man muß sie also vergleichen können. Wo hast du das denn definiert?

Dann prüfst du nicht ob überhaupt eine id nach tempid eingelesen werden konnte.

Außerdem ist nicht klar ob du bei deiner Suche überhaupt was gefunden hast, du verwendest aber einfach die Werte die in vergleich, vername und verpreis drin stehen. Weiter braucht man logischerweise nicht weitersuchen wenn man den richtigen Eintrag gefunden hat.

Code:
		cout << "Geben Sie die Artikelnummer ein: ";
		if (cin >> tempid) {
			// tempid wurde eingelesen.
			if(tempid <= 0) break;
		} else {
			// tempid konnte nicht eingelesen werden
			// z.B. Formatfehler (kein int) etc.
			break;
		}

		bool found = false;
		for(set<Daten>::iterator x=daten1set.begin();x !=daten1set.end();x++)
		{
			if (tempid==x->Get1())
			{
				vergleich=x->Get1();
				verpreis=x->Get3();
				vername=x->Get2();

				found = true; break; // wenn gefunden, stopp.
			}
		}
		if (found) {
			templiste.Set(vergleich,vername,verpreis);
			tempset.insert (templiste);

            		// Das ist ein Speicherleck!!
                        /* Daten *bla = new Daten(templiste);
                            tempset.insert(*bla); */
		} else {
			cerr << "Fehler: id " << tempid << " nicht gefunden.\n";
		}
	} while( tempid != 0 ); // doppelt gemoppelt.

// ----------------------

int Daten::Get1()const
{
	// über "this->id" zuzugreifen ist unnötig.
	return id;
}
string Daten::Get2()const
{
	return name;
}

float Daten::Get3()const
{
	return preis;
}
 
Zurück