मैं यह पता लगाने की कोशिश कर रहा हूं कि std::multimap
इटरेटर कैसे काम करते हैं, इसलिए मैंने एक साधारण उदाहरण बनाया है जो मेरी समस्या का पदार्थ दिखाता है। अगर असंगत मामला 1 है, तो मैं उम्मीद करता हूं कि इटेटरेटर कुंजी 1 के साथ पहले तत्व को इंगित करे, लेकिन हकीकत में यह कुंजी 0 से जुड़े सभी मानों को प्रिंट करता है (जैसे कुछ भी मिटा नहीं गया था) और कभी-कभी यह क्रैश हो जाता है, संभवतः क्योंकि इटरेटर अमान्य है। हालांकि अगर असम्भवता मामला 2 है, तो कुंजी 1 के साथ सभी मान ठीक से हटा दिए जाते हैं।सी ++ मल्टीमैप इटरेटर अमान्यता
क्या यह जानने का कोई तरीका है कि multimap
के बाद एरर के बाद अगला मान्य इटरेटर क्या है? (उदाहरण के लिए std::vector.erase(...)
रिटर्न एक)
std::multimap<int, int> m;
for(int j=0; j<3; ++j) {
for(int i=0; i<5; ++i) {
m.insert(std::make_pair(j, i));
}
}
for(std::multimap<int, int>::iterator it=m.begin(); it!=m.end();) {
printf("%d %d\n", (*it).first, (*it).second);
++it;
if((*it).second == 3) {
//m.erase(0); //case 1
m.erase(1); //case 2
}
}
"' (* इसे)। पहला '"क्यों नहीं- यह पहले-? – curiousguy
क्या यह वास्तव में मायने रखता है? यह वही काम पूरा करता है और मुझे 9 5% यकीन है कि यह एक ही कोड को संकलित करेगा। –
@curiousguy कारण मुझे लिखना पसंद है (* इसे)। सबसे पहले। – givi