itérateur de validité ,après avoir effacer() appel à std::set

Faire effacer appel à std::set d'invalider l'itérateur ? Comme je l'ai fait en dessous de la 5ème à partir de la dernière ligne..?
si oui quel est le meilleur moyen pour effacer tous les éléments de l'ensemble

class classA
{
public:
    classA(){};
    ~classA(){};
};
struct structB
{
};

typedef std::set <classA*, structB> SETTYPE;        
typedef std::map <int, SETTYPE>MAPTYPE;

int __cdecl wmain (int argc, wchar_t* pArgs[])
{
    MAPTYPE mapObj; 
    /*
      ...
      ..   Some Operation Here
      ...
      */
    for (MAPTYPE::iterator itr1=mapObj.begin(); itr1!=mapObj.end(); itr1++) 
    {       
        SETTYPE li=(*itr1).second;
        for (SETTYPE::iterator itr2=li.begin();itr2!=li.end();itr2++) 
        {
            classA *lt=(classA*)(*itr2);
            li.erase(itr2); 
            delete lt; //Does it invalidate Iterator ?
        }
    }
}
typedef std::set <classA*, structB> SETTYPE; je ne suis pas sûr de savoir pourquoi vous donnons StructB comme deuxième argument de modèle pour le std::set. std::set ne contient qu'une seule valeur (il n'y a pas les touches avec les définir comme c'est le cas avec la carte), le deuxième argument de modèle est utilisé pour fournir le foncteur de comparaison pour l'ensemble (std::less par défaut)

OriginalL'auteur Satbir | 2009-10-28