Lösche Aufruf in Std :: Set Ungültig Iterator? Wie ich unten 5 von der letzten Zeile getan habe ..? ja wenn das, was besserer Weg ist es, alle Elemente von Satz zu löschenIterator-Gültigkeit, nach Erase() Aufruf in 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; Ich bin mir nicht sicher, warum Sie StructB als zweites Template-Argument für die std :: set geben. std :: set enthält nur einen Wert (es gibt keine Schlüssel mit set, wie es mit map), das zweite Template-Argument wird verwendet, um Vergleich functor für die Menge (std :: weniger standardmäßig) –