मैं विशेष स्थिति के आधार पर मानचित्र से तत्वों की एक श्रृंखला को मिटाने की कोशिश कर रहा था। मैं इसे एसटीएल एल्गोरिदम का उपयोग कैसे करूं?
प्रारंभ में मैंने उपयोग करने के बारे में सोचा था remove_if
लेकिन यह संभव नहीं है क्योंकि remove_if साहचर्य कंटेनर के लिए काम नहीं करता है।
क्या कोई "remove_if" समतुल्य एल्गोरिदम है जो मानचित्र के लिए काम करता है?
एक सरल विकल्प के रूप में, मैंने नक्शे के माध्यम से लूप करने और मिटाने के बारे में सोचा। लेकिन नक्शे के माध्यम से लूपिंग और एक सुरक्षित विकल्प को मिटा रहा है? (जैसे कि मिटाने के बाद पुनरावृत्तियां अमान्य हो जाती हैं)
मैंने निम्नलिखित उदाहरण का उपयोग किया:
bool predicate(const std::pair<int,std::string>& x)
{
return x.first > 2;
}
int main(void)
{
std::map<int, std::string> aMap;
aMap[2] = "two";
aMap[3] = "three";
aMap[4] = "four";
aMap[5] = "five";
aMap[6] = "six";
// does not work, an error
// std::remove_if(aMap.begin(), aMap.end(), predicate);
std::map<int, std::string>::iterator iter = aMap.begin();
std::map<int, std::string>::iterator endIter = aMap.end();
for(; iter != endIter; ++iter)
{
if(Some Condition)
{
// is it safe ?
aMap.erase(iter++);
}
}
return 0;
}
for(auto iter=aMap.begin(); iter!=aMap.end(); ){ ....}
अव्यवस्था को कम करने के लिए उपयोग कर सकते हैं । बाकी जैसा कि दूसरों ने कहा है। इस प्रश्न ने मुझे अभी-अभी ;-)