इन भार के
auto std::unordered_map::insert(const value_type&) -> ...
template<class P>
auto std::unordered_map::insert(P&&) -> ...
की
दोनों के अपने फायदे हैं और न ही पूरी तरह से अन्य जगह ले सकता है।पहला लगता है जैसे P
से दूसरे के विशेष मामले की तरह const value_type&
हो सकता है। दूसरे अधिभार के बारे में अच्छी बात यह है कि आप अनावश्यक प्रतियों से बच सकते हैं। उदाहरण के लिए, इस मामले में:
mymap.insert(make_pair(7,"seven"));
यहाँ, make_pair का परिणाम वास्तव में एक pair<int, const char*>
जबकि value_type
pair<const int, string>
हो सकता है। तो, एक अस्थायी value_type
ऑब्जेक्ट बनाने और को कंटेनर में कॉपी करने के बजाय, हमारे पास तर्क को परिवर्तित करके और/या अपने सदस्यों को स्थानांतरित करके सीधे value_type
ऑब्जेक्ट को मानचित्र में बनाने का मौका है।
दूसरी ओर, यह अच्छा है कि अगर यह के रूप में अच्छी तरह से काम होगा:
mymap.insert({7,"seven"});
लेकिन इस सूची वास्तव में एक अभिव्यक्ति नहीं है! संकलक इसके कारण दूसरे अधिभार के लिए पी को कम नहीं कर सकता है। पहला अधिभार अभी भी व्यवहार्य है क्योंकि आप ऐसी सूची के साथ pair<const int,string>
पैरामीटर को प्रतिलिपि बना सकते हैं।
मौन ........ –
संभवतः TR1 से विरासत। हो सकता है कि वे सुरक्षित रहें और कार्यों को न हटाएं, केवल उन्हें जोड़ें। शायद वे उस समय के प्रभाव पर निश्चित नहीं थे जो मौजूदा कोड पर हो सकता है जो TR1 का उपयोग करता था। –
मैंने एक [प्रोग्राम] (http://liveworkspace.org/code/4y16As$46) बनाने की कोशिश की है जो संकलित करने में विफल रहता है यदि आप 'सम्मिलित करें (const value_type &)' को हटाते हैं, और असफल हो जाते हैं। किसी के पास विचार है? – Yakk