2016-12-16 17 views
10

सी ++ मानक का उपयोग कर एक std::map निर्माता को परिभाषित करता है एक std::initializer_list:std :: नक्शा प्रारंभकर्ता सूची निर्माता

map(std::initializer_list<value_type> init, const Allocator&); 

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

std::map<std::string, int> my_map { 
    {"a", 1}, 
    {"a", 2} 
}; 

व्यवहार में, यह है, यह insert() तरह बर्ताव करता है लगता है ताकि नक्शा अब शामिल होंगे जो {a: 1}।

हालांकि, मैं इसके बारे में सी ++ मानक में कुछ भी नहीं ढूंढ पाया।

उत्तर

5

N4296 (~ सी ++ 14)

टेबल 102 - साहचर्य कंटेनर आवश्यकताओं

X(il); | X(il.begin(), il.end()) के समान।

तालिका में ऊपर से

फिर, इटरेटर ctor के लिए:

प्रभाव: एक खाली कंटेनर निर्माणों और इसे में सीमा [i, j) से तत्वों सम्मिलित करता है; तुलनात्मक वस्तु के रूप में c का उपयोग करता है।

और

i और j इनपुट इटरेटर आवश्यकताओं को संतुष्ट और तत्वों परोक्ष value_type के लिए परिवर्तनीय को देखें, [i,j) किसी मान्य श्रेणी इंगित करती है,

ध्यान दें कि यहां "और तत्वों सम्मिलित करता है" insert फ़ंक्शन को इंगित करने के लिए चिह्नित किया गया है, लेकिन मुझे लगता है कि हम इसे इस तरह समझ सकते हैं। यह भी ध्यान रखें कि i और jइनपुट इटरेटर हैं, इसलिए क्रम में इसे घुमाया जाना चाहिए।

(यह, यह जानकारी प्राप्त करने के लिए थोड़ा कठिन होता है क्योंकि बराबर टेबल सभी

il है प्रकार initializer_list<value_type>

उनके ऊपर

का एक उद्देश्य निर्दिष्ट करता है, तो initializer_list की खोज करके पाया जा सकता है , लेकिन इस तालिका के लिए शब्द को दो पंक्तियों में विभाजित किया गया है, ब्रेक पर एक हाइफ़न के साथ।)

+3

कम से कम उद्धृत भागों से तकनीकी रूप से, मानक उसमें निर्देशित नहीं लगता है या तत्वों को डाला जाएगा। – user2079303

+0

@ उपयोगकर्ता 2079303 बेहतर? – BoBTFish

+2

मुझे यकीन नहीं है कि यह पर्याप्त है या नहीं।निश्चित रूप से जब उत्तीर्ण पुनरावर्तक केवल इनपुट इटरेटर होता है, तो उन्हें क्रम में डाला जाना चाहिए, लेकिन प्रारंभकर्ता_सूची का पुनरावर्तक एक यादृच्छिक अभिगम इटरेटर है और मुझे विभिन्न प्रकार के इटरेटर के लिए विशेषज्ञता को प्रतिबंधित करने वाला नियम नहीं दिख रहा है। – user2079303

संबंधित मुद्दे