मानक कंटेनर और कंटेनर एडाप्टर मूल्य अर्थशास्त्र है। जब आप कतार में कोई तत्व दबाते हैं, तो एक प्रतिलिपि बनाई जाती है। जब आप कतार से किसी ऑब्जेक्ट को हटाते हैं, तो वह ऑब्जेक्ट नष्ट हो जाता है।
भले ही top()
आपको गैर-const
का संदर्भ वापस कर देगा, तो जैसे ही आप कतार से तत्व को हटाते हैं, वैसे ही यह संदर्भ खतरनाक हो जाएगा, और इसके संदर्भ में इसे अपरिभाषित व्यवहार में परिणाम मिलेगा।
यह कहा अपने आंतरिक आदेश के साथ std::priority_queue
रिटर्न आप आप खिलवाड़ (जानबूझकर या अनजाने में) से रोकने के लिए const
के लिए एक संदर्भ - यह बहुत ज्यादा एक ही कारण नहीं है क्यों इस तरह के std::map
और std::set
के रूप में साहचर्य कंटेनरों की कुंजी const
है ।
SomeClass obj = pQueue.top();
pQueue.pop();
obj.setMember(42);
pQueue.push(std::move(obj)); // You can move obj into the queue if you no more need it
आप हैं:
आप क्या कर सकते हैं, बजाय,, top()
द्वारा दिए गए मान के प्रतिलिपि निर्माण करने के लिए है कि नकल, संशोधित करने, मूल हटाने, और कतार में प्रति धक्का है दूसरी तरफ संदर्भ अर्थशास्त्र की आवश्यकता है, तो आपको कतार में संभवतः पॉइंटर्स धक्का (संभावित रूप से स्मार्ट पॉइंटर्स, आपके उपयोग के मामले के आधार पर) को धक्का देना होगा और उचित कस्टम ऑर्डरिंग मानदंड प्रदान करना होगा जो उन पॉइंटर्स को गुणों के आधार पर ऑर्डर करेगा वे वस्तुओं को इंगित करते हैं।
इस मामले में, सावधान रहें कि उन गुणों को रन-टाइम पर संशोधित न करें जिससे वे अपना ऑर्डर अलग कर सकें। यह "कंटेनर" के आंतरिक क्रम के साथ गड़बड़ कर देगा, और इसके परिणामस्वरूप अपरिभाषित व्यवहार होगा।
स्रोत
2013-05-25 23:20:57
@Ethouris आपने पूरे बयान "पूर्ण बीएस" लेबलिंग की गलती की है। जो लगभग उसी कारण से विडंबनापूर्ण रूप से गलत है जिसे आप "बकवास" पर हमला करते हैं। – sehe
@Ethouris: कृपया अनावश्यक आक्रामकता से बचें। असहमत होने के लिए और अधिक सुरुचिपूर्ण तरीके हैं। मेरा मुद्दा था (मुझे लगता है, यह 2.5 साल हो गया है) जो तत्व मानक कंटेनरों से धकेलते हैं और हटा दिए जाते हैं, तो ओपी क्या करना चाहता है (कंटेनर के अंदर तत्व का संदर्भ प्राप्त करें, तत्व को हटाएं, संकेत दें) अमान्य है - यूबी में परिणाम। यह आपके द्वारा उल्लेख किए गए सभी अन्य कंटेनर जैसी प्राथमिकता कतारों पर लागू होता है - 'कतार'। मैं यह नहीं कह रहा हूं कि प्राथमिकता कतार इस संबंध में विशेष हैं। –
@Ethouris: इसके अलावा, प्राथमिकता कतारों के संदर्भ में प्राथमिकता कतारों का संदर्भ अमान्यता से कोई लेना देना नहीं है: जैसा कि उत्तर में बताया गया है, इसका कारण है कि उपयोगकर्ता को आंतरिक आदेश मानदंड के साथ गड़बड़ करने से रोकें। –