¿Cómo borrar la llamada en std :: set invalidate iterator? Como he hecho debajo del 5to de la última línea ...? si es así lo que es mejor forma de borrar todos los elementos de conjuntovalidez del iterador, después de la llamada a erase() en std :: set
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 SETTYPE; No estoy seguro de por qué le está dando StructB como segundo argumento de la plantilla para el estándar. std :: set solo tiene un valor (no hay claves con set como con el mapa), el segundo argumento de plantilla se usa para proporcionar el functor de comparación para el conjunto (std :: less por defecto) –