में मिटाएं() कॉल के बाद std :: set में कॉल मिटाएं इटरेटर को अमान्य करें? जैसा कि मैंने पिछली पंक्ति से 5 वें स्थान पर किया है ..? यदि हाँ सेट से सभी तत्वों को मिटाने के लिए बेहतर तरीका क्या हैइटरेटर वैधता, 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 ?
}
}
}
टाइपपीफ std :: set SETTYPE; मुझे यकीन नहीं है कि आप स्ट्रक्चरब को std :: सेट पर दूसरे टेम्पलेट तर्क के रूप में क्यों दे रहे हैं। std :: set केवल एक मान रखता है (मानचित्र के साथ सेट के साथ कोई कुंजियां नहीं हैं), दूसरा टेम्पलेट तर्क सेट के लिए तुलनात्मक फ़ैक्टर प्रदान करने के लिए उपयोग किया जाता है (डिफ़ॉल्ट रूप से std :: कम) –