दिलचस्प पोस्ट
जावास्क्रिप्ट: कोई फाइल अपलोड किए बिना … फ़ाइल के बिना यह जांच कैसे करें कि कोई प्रक्रिया बैच स्क्रिप्ट के माध्यम से चल रही है या नहीं .XSD फ़ाइलों से जावा कक्षाएं उत्पन्न करें …? वेबसाइट और प्रवेश डेटा में लॉगिन करने के लिए वेबमेल या वेबआरिएंस्ट का उपयोग करना लाइब्रेरी फ़ाइलों और मॉड्यूल के बीच क्या अंतर है? MySQL क्वेरी के WHERE खंड में स्तंभ उपनाम का उपयोग करके त्रुटि उत्पन्न होती है आईफोन परीक्षण के लिए यूनिवर्सल आईफ़ोन / आईपैड एप्लिकेशन डिबग संकलन त्रुटि PHP सेटलोकाले का कोई प्रभाव नहीं है जावा प्रोग्राम से मैं पूरी तरह से स्वतंत्र प्रक्रिया कैसे लांच करूं? आपका पासवर्ड नमस्कार: सर्वोत्तम व्यवहार? IOS 8 UIPageViewController संक्रमण के बाद लागू बाधाओं बहु-आयामी को फ्लैट सरणी को कनवर्ट करें दुविधा: फ्रैगमेंट बनाम क्रियाकलापों का उपयोग करने के लिए: बैच फ़ाइल में स्ट्रिंग की लंबाई कैसे प्राप्त करें? पूर्ववत करें, बूंद राज्य को रेपो कैसे लाएं

एक 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 () शायद इस मामले में अच्छी योजना नहीं है क्योंकि आईटरेटर स्थिरता की गारंटी नहीं है, मुझे विश्वास है।