2013-03-31 13 views
5

एसटीडी का उपयोग करते समय std :: सरणी मैं एक समय में मान निर्दिष्ट कर सकते हैं:कई मान आवंटित एसटीडी में :: सरणी :: नक्शा

std::array<int, 3> a2 = {1, 2, 3}; 

लेकिन मैं सबसे अच्छा तरीका यह है जब ऐसा करने के लिए पता नहीं है उपर्युक्त सरणी को मानचित्र में जोड़ा गया है:

using namespace std; 
map <string, array<int, 3>> myMap; 

//I'm doing it like below now... 

array<int, 3> tempArray = {1,2,3}; // can I save this line somehow? 
myMap[myString] = tempArray; 

कृपया मुझे यह भी बताएं कि यह वास्तव में सही तरीका है या नहीं। धन्यवाद!

उत्तर

4

जबकि insert का उपयोग कर के रूप में अन्य जवाब में दिखाया गया है और अधिक कुशल है, आप भी

myMap["foo"] = {{1,2,3}}; 

उपयोग कर सकते हैं संक्षिप्त कोड आपके लिए ज़्यादा ज़रूरी है।

+0

@ShmilTheCat प्रश्न सी ++ 11 के बारे में है और यह एक विशिष्ट संकलक की आवश्यकता को इंगित नहीं करता है। यह जीसीसी 4.6.3, जीसीसी 4.7.2, जीसीसी 4.8.0 और क्लैंग 3.2 के साथ काम करता है। यह मानक-अनुरूप सी ++ 11 है। –

2

आप एक लाइन (हालांकि नहीं कई अक्षर) इस तरह बचा सकते हैं:

myMap.insert(std::make_pair(myString,array<int,3>{{1,2,3}})); 

Btw, जीसीसी के अनुसार 4.7.2 आप के लिए tempArray

हालांकि प्रारंभकर्ता आसपास ब्रेसिज़ की एक जोड़ी याद कर रहे हैं यह myString के लिए मैप किए गए मान को संशोधित नहीं करेगा यदि यह पहले से मौजूद है।

और यदि आपके पास लाइब्रेरी है जिसमें std::map::emplace है तो आप अधिक वर्ण सहेज सकते हैं।

+0

मुझे विश्वास है कि इसे सी + 11 के रूप में संकलित किया जाना चाहिए, जैसा कि टैग किया गया है। यह जीसीसी 4.7.2, क्लैंग-3.2 और इंटेल सी ++ 2013.2 –

+0

के तहत संकलित करता है एमएसवीसी ++ 2012 में सी ++ 11 समर्थन की सीमा यहां दिखाया गया है: http://msdn.microsoft.com/en-gb/library/vstudio/hh567368 .aspx। यह प्रारंभिक सूचियों का समर्थन नहीं करता है, और भी बहुत कुछ। –

+0

@ShmilTheCat और [यहां] [http://cpprocks.com/c11-compiler-support-shootout-visual-studio-gcc-clang-intel/) वीसी 2012 नवंबर में सी ++ 11 फीचर समर्थन के लिए एक अच्छा तुलना चार्ट सीटीपी, जीसीसी 4.8, क्लैंग 3.3 और इंटेल 13 कंपाइलर। उस ने कहा: क्या आपने सीटीपी स्थापित और सक्षम किया है? –

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