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 hehehe

    danke nochmals


Anmelden zum Antworten