दिलचस्प पोस्ट
एचटीटीपी के साथ काम नहीं कर रहा PHP कर्ल जावास्क्रिप्ट: ऑब्जेक्ट्स के लिए फ़िल्टर () AlertDialog.Builder कस्टम लेआउट और EditText के साथ; दृश्य का उपयोग नहीं कर सकते "->" PHP ऑपरेटर क्या कहा जाता है और आप जोर से कोड पढ़ते समय कैसा बोलते हैं? किसी अन्य विधि में एक विधि के एक चर का उपयोग कैसे करें? इंटेल सैंड्रिब्रिज-परिवार सीपीयू में पाइप लाइन के लिए एक कार्यक्रम को हटाना Excel सूत्रों में दोहरे उद्धरण वाले स्ट्रिंग कैसे बनाएं? XmlSerializer समर्थन शब्दकोश क्यों नहीं है? कोई submodule मैपिंग एक पथ के लिए .gitmodule में पाया नहीं है जो एक सबमोड्यूल नहीं है पायथन के पुनः खोज और पुनः मिलान में क्या अंतर है? JAXB: मार्शल कैसे <key> मान </ key> में मैप करें संपादन टेक्स्ट के लिए टेक्स्ट व्यूअर को कार्यान्वित करना एक संख्या (1, 2, 3) को एक स्ट्रिंग में बदलने (एक, दो, तीन) PHP में Excel-Vba में एक 'पूर्ववत करें' फ़ंक्शन प्रोग्राम को कैसे प्रोग्राम करें? स्पार्क में डिफ़ॉल्ट विभाजन योजना

एक std :: नक्शा से आइटम कैसे फ़िल्टर करें?

मेरे पास लगभग निम्न कोड है क्या यह बेहतर या बेहतर बनाया जा सकता है? शायद std::remove_if का उपयोग कर रहे हैं? क्या आप मैट्रिक से सामान निकालते समय निकाल सकते हैं? क्या हम अस्थायी मानचित्र का उपयोग करने से बच सकते हैं?

 typedef std::map<Action, What> Actions; static Actions _actions; bool expired(const Actions::value_type &action) { return <something>; } void bar(const Actions::value_type &action) { // do some stuff } void foo() { // loop the actions finding expired items Actions actions; BOOST_FOREACH(Actions::value_type &action, _actions) { if (expired(action)) bar(action); else actions[action.first]=action.second; } } actions.swap(_actions); } 

वेब के समाधान से एकत्रित समाधान "एक std :: नक्शा से आइटम कैसे फ़िल्टर करें?"

आप मिटा () का उपयोग कर सकते हैं, लेकिन मुझे नहीं पता कि कैसे BOOST_FOREACH अवैध बरामद को संभालता है I नक्शा :: दस्तावेज के लिए दस्तावेज बताता है कि केवल मिटाए गए इटरेटर को अवैध ठहराया जाएगा, दूसरों को ठीक करना चाहिए। यहां बताया गया है कि मैं आंतरिक पाश को कैसे पुनर्गठन करूँगा:

 Actions::iterator it = _actions.begin(); while (it != _actions.end()) { if (expired(*it)) { bar(*it); Actions::iterator toerase = it; ++it; _actions.erase(toerase); } else ++it; } 

मार्क रेन्सॉम एल्गोरिथम की एक भिन्नता लेकिन अस्थायी आवश्यकता के बिना।

 for(Actions::iterator it = _actions.begin();it != _actions.end();) { if (expired(*it)) { bar(*it); _actions.erase(it++); // Note the post increment here. // This increments 'it' and returns a copy of // the original 'it' to be used by erase() } else { ++it; // Use Pre-Increment here as it is more effecient // Because no copy of it is required. } } 

यदि विचार समाप्त होने वाली वस्तुओं को निकालना है, तो मानचित्र का उपयोग क्यों न करें : मिटाएं ? इस तरह आपको केवल उन्हीं तत्वों को निकालना होगा जिनकी आपको अब और आवश्यकता नहीं है, संपूर्ण प्रतिलिपि को सभी तत्वों के साथ पुनर्निर्माण न करें जिन्हें आप रखना चाहते हैं

जिस तरह से आप ऐसा करेंगे, उन तत्वों को इंगित करने वालों को बचाने के लिए है, जिन्हें आप मिटाना चाहते हैं, फिर उनको मिटा दें, फिर उनको मिटा दें।

या, आप जिस तत्व को देख चुके हैं उसे बचा सकते हैं, अगले तत्व पर जा सकते हैं, और तब अस्थायी रूप से मिटा सकते हैं। लूप सीमा आपके मामले में गड़बड़ हो जाती है, हालांकि, आपको अपने आप को पुनरावृत्ति ठीक करना होगा

समय सीमा समाप्त () कार्यान्वयन के आधार पर, अन्य बेहतर तरीके हो सकते हैं। उदाहरण के लिए, यदि आप टाइमस्टैम्प का मानचित्र मानचित्र की कुंजी के रूप में रखते हैं (जैसा कि समय सीमा समाप्त हो रहा है)?), तो आप वर्तमान टाइमस्टैम्प पर ऊपरी_बाउंड कर सकते हैं, और श्रेणी के सभी तत्वों [शुरू (), ऊपरी_बाउंड ()) की आवश्यकता है संसाधित और मिटाना

कुछ ऐसा कोई भी जो कभी पता नहीं चलता है कि वह किसी भी कंटेनर पर उपयोग किए जाने पर एक नया, गारंटी-से-वैध वैधता देता है, मिटा देता है

 Actions::iterator it = _actions.begin(); while (it != _actions.end()) { if (expired(*it)) { bar(*it); it = _actions::erase(it); } else ++it; } 

स्टोर्सिंग actions.end () शायद इस मामले में अच्छी योजना नहीं है क्योंकि आईटरेटर स्थिरता की गारंटी नहीं है, मुझे विश्वास है।