map mit new erzeugen und insert werte



  • ich habe eine map mit folgender structur

    .h

    typedef std::map<CString,int> myType;
    
    std::map<CString, myType *> m;
    

    jetzt will ich in einer methode

    .cpp

    myType *temp= new myType;
    
    temp.insert(std::make_pair(_key, _value ));  // hier die map = value  --> fehler
    
    m[_name] =  temp;  // hier der CString = key
    

    Fehlermeldung: linker teil von insert muss eine klasse/struct/union sein

    wie soll ich es sonst machen?

    dann muss ich im dekonstructor die map durchgehen, schauen ob es zum key einen value gibt und wenn ja dann diesen deleten? habt ihr einen tipp?



  • temp->insert  // -> statt .  war nötig
    

    wie mach ich das mit den deletes jetzt?



  • wie lösche ich einen key?

    std::map<CString,myType*>::iterator p2; // iter. erzeugen
      p2 = m.find(name);  // wert suchen
    
      if( p2 != m.end() ){  // wenn gefunden, dann, sonst nichts
    
        m.erase(p);    // geht nicht, warum nicht?
    //müsste ich nicht zuerst schauen ob es key gibt die mit new erzeugt werden, wenn ja wie, und wie lösche ich diese dann?
      }
    


  • Morgen,

    was heisst "geht nicht"? Gibt es eine Fehlermeldung vom Compiler? Stuertzt das
    Programm ab? Faehrst du Fahrrad oder laeufst du lieber? Hab meine Glaskugel leider
    daheim gelassen.

    Tipp:

    p2->first == dein name
    p2->second == myType*
    nachdem du einen iterator geloescht hast, ist dieser unglueltig. Schau dir mal
    an, was die erase-Funktion als Rueckgabewert liefert.

    mfg
    v R



  • 1. einer der sich sehr gut auskennt, weiss warum es nicht geht und braucht keine fehlermeldung

    2. ich hab doch gesagt, dass ich mit new speicher angefordert habe

    3. d.h. ich kann nicht einfach earse machen!!!!!

    4. meine lösung

    //...
      std::map<CString,myType*>::iterator p2;
      p2 = m.find(name);
    
      if( p2 != m.end() ){
    
        p2->second->clear();
        delete p2->second;    // <------ important
        sectionKeysColor_.erase(p2);
    
      }
    

    ceckst jetzt warum das so einfach nicht geht?? danke


Anmelden zum Antworten