c++ - Iterator invalidation in boost::unordered_map -
मैं अब मैं एक सूची में क्या सूची में बदलाव करने से इटेटर मैनेजर को अमान्य किया जा सकता है? तत्व मिटाकर मिटता हुआ तत्व की ओर इशारा करते हुए इटरेटर को अमान्य कर देगा। मैं अपने कोड को कैसे संशोधित कर सकता हूं ताकि इससे कोई समस्या न हो? धन्यवाद > boost :: unordered_map का उपयोग कर रहा हूं
Typedef बढ़ावा :: shared_ptr & lt; writerExeciter & gt; PtrWriter; Typedef std :: सूची & lt; PtrWriter & gt; PtrList; बढ़ावा :: unordered_map & lt; std :: जोड़ी & lt; अहस्ताक्षरित int, अहस्ताक्षरित लंबे समय & gt ;, PtrList & gt; नक्शा नक्शा instrMap;
PtrList की सूची में कुछ बदलाव कर रहा हूं
के लिए (यह स्वतः = instrMap। शुरू (), यह! = InstrMap.end (); ++ यह) {ऑटो कुंजी = यह- & gt; पहले (); ऑटो सूची & amp; = यह- & gt; दूसरा (); // सूची में एक तत्व में कुछ बदलाव करें यदि (list.empty ()) {instMap.erase (कुंजी); }}
इसे
++ के बजाय सहायता
मिट () ऑपरेशन इटरेटर को रद्द कर देगा हालांकि, यह अगले तत्व के लिए एक वैध इटरेटर देता है। तो आप निम्न की तरह कुछ का उपयोग कर सकते हैं: <प्री>
के लिए (स्वतः = instrMap.begin (); it! = InstrMap.end ();) {auto key = it- & gt; पहले ( ); ऑटो सूची & amp; = यह- & gt; दूसरा (); // सूची में एक तत्व में कुछ बदलाव करें यदि (list.empty ()) {यह = instMap.erase (यह); } और {++; }}
Comments
Post a Comment