Hallo,
ich habe eine Klasse geschrieben, welche mittles einer Multimap strings mit Integers verknuepft(multimap<string,int>). Die Klasse hat 3 Methoden: check(string), insert(string,int) und delete(string, int).
Mittels check(string) werden der Reihe nach alle Integer abgearbeitet (In einer weiteren map ist jedem Integer ein Zeiger auf ein Objekt zugeordnet, welches aufgerufen wird, bzw. eine Methode des Objekts), welche mit dem string assoziiert sind:
Code:
map<int,meineklasse*> objektmap;
multimap<string,int> MeineMultimap;
multimap<string,int>::iterator iter;
multimap<string,int>::iterator iter_low;
multimap<string,int>::iterator iter_up;
iter_low=MeineMultimap.lower_bound(MeinString);
iter_up =MeineMultimap.upper_bound(MeinString);
for(iter=iter_low; iter != iter_up; iter++)
{
objektmap[iter->second]->meinemethode();
}
Mittels insert(string,int) wird ein neuer Wert erstellt:
Code:
insert(string Tanga, int Integaer)
{
objektmap.insert(make_pair(Integaer, new meineklasse()));
MeineMultimap.insert(make_pair(Tanga, Integaer));
}
Und nun kommt glaube ich (glaube ich nur deshalb hab ich mal so ziemlich alles was mein Problem betreffen koennte hier gepostet) der Knackpunkt und mein Problem.
Mittels delete wird ein Wert/Integer aus der Multimap geloescht, damit er nicht mehr bei aufrufen von check ¨ausgefuehrt¨ wird:
Code:
delete(string Tanga, int Integaer)
{
delete objektmap[Integaer];
objektmap.erase(Integaer);
multimap<string,int>::iterator iter;
multimap<string,int>::iterator upper;
multimap<string,int>::iterator lower;
vector<int> puffer;
upper=MeineMultimap.upper_bound(Tanga);
lower=MeineMultimap.lower_bound(Tanga);
for(iter=lower; iter!=upper; iter++)
{
puffer.push_back(iter->second);
}
MeineMultimap.erase(Tanga);
for(int i=0; i<puffer.size(); i++)
{
if(puffer[i]!=Integaer)
MeineMultimap.insert(make_pair(Tanga, puffer[i]));
}
}
Ich gehe dabei so vor, dass ich erst die kompletten Werte, welche zu dem jeweiligen Key vorhanden sind kopiere, den Key dann loesche und den Key neu erstelle mit allen gespeicherten werten in puffer, nur ohne den zu loeschenden Wert.
Ich finde das ganze sieht schon so aus, als koennte es funktionieren das Problem ist jedoch, dass nun nach einem Aufruf von delete und einem darauf folgendem Aufruf von check, zwar nichtmehr das Objekt mit dem Integer, welcher durch delete geloescht werden sollte aufgerufen wird. Jedoch wird nun (glaube ich) der Integer des naechsten strings verarbeitet. Irgendwie funktioniert das loeschen aus der Multimap nicht. Oder kann es sein, dass wenn ich check aufrufe, ohne, dass zu dem Key ein Wert in der Multimap hinterlegt ist (bzw. der Key gar nicht existiert) ¨Mist¨ herauskommt (genauer ein falscher int-wert aufgerufen wird)?
Ich hoffe ich hab das ganze einigermassen verstaendlich erklaert und dass mir jemand helfen kann... bin schon langsam am Verzweifeln
Auf jeden Fall schon mal vielen Dank!
Achja: man moege mir verzeihen, dass ich von integers geredet habe, welche aufgerufen werden, damit meinte ich naetuerlich das damit assoziierte Objekt(bzw. der damit verbundene Zeiger ). Ich denke aber, dass es so verstaendlicher ist.
Lesezeichen