std::map Map-element entfernen??
-
So ich habe zwar das schon mit ner liste gelöst nun möchte ich das noch mit ner
Map haben zu übungszwecken
habe wie folgt ein Objekt:#include<iostream> using std::ostream; using std::cout; class Student { friend ostream& operator<< (ostream&, const Student&); public: Student(const int& ,const string&, const string&); virtual ~Student(void); bool operator<(const Student&)const; //bool operator==(const Student&)const; void setNoten(const int& pg, const int&tk, const int&ma); void durchschnitt(); double getDurchschnitt()const; string getName()const; private: int matrikelnummer; string name; string vorname; double tK; double pG; double mA; double ds; double med; };
und auszug aus main .
.. #include <map> // map class-template definition // define short name for map type used in this program typedef std::map< int, Student, std::less< int > > StudentenMap; #include <vector> typedef std::vector<double> PGnoten; .. void removeStud(StudentenMap&); int _tmain(int argc, _TCHAR* argv[]) { StudentenMap studentenliste; PGnoten pgvector; loadList(ifstream& inFile, StudentenMap & studentenliste); for ( StudentenMap::const_iterator iter2 = studentenliste.begin(); iter2 != studentenliste.end(); ++iter2 ) cout << iter2->first << '\t' << iter2->second << '\n'; //laden und anzeigen bis hierhin funktionsfähig removeStud(StudentenMap &); //hier fehler//ab hier das problem.... .. } [cpp]//problem funktion!!) void removeStud(StudentenMap& studentenliste) { string name; cout<<"Welchen Student moechten sie enfernen?:"; cin>>name; StudentenMap::iterator iter; for(iter=studentenliste.begin(); iter!=studentenliste.end(); ++iter) { if((*iter).second.getName()==name) { studentenliste.erase(((*iter).first,(*iter).second); //, was muss ich machen ???? } } } ..
leider habe ich diverse fehlermeldungen weil ich leider die richtige grammatik nicht beherrsche :(. möchte ein element aus map entfernen.
-
ich könnte mir vorstellen dass auch beoim löschen aus der Map der Iterator ungültig wird.
Wie man damit umgeht steht im list - Thread
-
for(iter=studentenliste.begin(); iter!=studentenliste.end();) { if(iter->second.getName()==name) { iter=studentenliste.erase(iter); } else { ++iter; } }
wenn das nicht alle Fehler waren, brauch ich mehr fehlermeldungen, dann sieht man sowas mit wesentlich weniger aufwand
-
ok ich geb mich meiner blödheit geschlagen
studentenliste.erase(iter++);
mehr net oh man hehehedanke nochmals