2010-04-19 18 views
42
std::map<int,int> mapy; 
++mapy[5]; 

क्या यह मानना ​​सुरक्षित है कि mapy[5] हमेशा 1 होगा? मेरा मतलब है, mapy[5] हमेशा '++' से पहले 0 का डिफ़ॉल्ट मान प्राप्त करेगा, भले ही स्पष्ट रूप से घोषित नहीं किया गया हो, जैसा कि मेरे कोड में है?मानचित्र <int,int> डिफ़ॉल्ट मान

+2

का मूल्य प्राप्त होगा [std :: नक्शा डिफ़ॉल्ट मान के निर्माण के लिए डिफ़ॉल्ट मान] (http://stackoverflow.com/questions/4523959/stdmap-default-value-for-build-in-type) – bobobobo

+2

@bobobobo: यह प्रश्न बिल्ड-इन प्रकार के लिए [std :: map डिफ़ॉल्ट मान से पुराना है] (http://stackoverflow.com/questions/4523959/ stdmap-default-value-for-build-in-type), तो डुप्लिकेट एक होना चाहिए [std :: नक्शा डिफ़ॉल्ट मान बिल्ड-इन प्रकार के लिए] (http://stackoverflow.com/questions/4523959/stdmap-default -value-निर्माण में प्रकार के लिए)। – mpromonet

उत्तर

66

जैसे ही आप [] ऑपरेटर के साथ मानचित्र तक पहुंचते हैं, यदि कुंजी मौजूद नहीं है तो यह जोड़ा जाता है। इंट टाइप के डिफ़ॉल्ट प्रारंभकर्ता को आवंटित किया जाता है - इसलिए इसे 0

+0

जैसा कि मैंने अनुभव किया है, एक प्रारंभिक आदिम 'int' का प्रारंभिक मान _undefined_ है - यह 0 हो सकता है, या यह -99765521 हो सकता है। कभी एक कक्षा वैरिएबल के रूप में एक अनियमित 'int' था और आपके प्रोग्राम में उन निराशाजनक मूल्यों में से एक था? उस ने कहा, मैंने इसका परीक्षण किया और ऐसा लगता है कि यह काम करता है। '# शामिल करें # नाम नामस्थान std का उपयोग करके; int मुख्य() { मानचित्र मीटर; (int i = 0; i <100; i ++) मीटर [i] ++; (कॉन्स जोड़ी और पी: एम) printf ("एम [% डी] =>% डी \ n", पी। फर्स्ट, पी। सेकेंड); } ' – bobobobo

+14

यह आपके विचार से अलग तरीके से काम करता है। int x; x को एक अपरिभाषित मान प्राप्त होता है int x = int(); फिर एक्स 0 कक्षा foo {int x; foo(): x() {}}; foo f; यहां f.x शून्य होगा –

7

हां, डिफ़ॉल्ट मान उस प्रकार का डिफ़ॉल्ट होगा। यदि आप एक और डिफ़ॉल्ट चाहते हैं, तो आप एक वर्ग बना सकते हैं जो एक int की तरह व्यवहार करता है लेकिन एक अलग डिफ़ॉल्ट कन्स्ट्रक्टर है।

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