2013-03-31 5 views
5

Quando si utilizza std :: gamma posso assegnare i valori in una sola volta:Assegnare valori multipli a std :: array in std :: map

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

Ma non so il modo migliore per farlo quando l'array sopra è combinato in una mappa:

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; 

Per favore fatemi sapere se questo è effettivamente il modo giusto. Grazie!

risposta

4

Durante l'utilizzo insert come mostrato in altra risposta è più efficiente, è anche possibile utilizzare

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

se il codice conciso è più importante per voi.

+0

@ShmilTheCat La domanda riguarda C++ 11 e non indica la necessità di un compilatore specifico. Funziona con GCC 4.6.3, GCC 4.7.2, GCC 4.8.0 e Clang 3.2. È conforme allo standard C++ 11. –

2

È possibile salvare una linea (anche se non molti personaggi) come questo:

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

BTW, secondo il GCC 4.7.2 ti manca un paio di parentesi graffe in tutto l'inizializzatore per tempArray

Tuttavia questo non modificherà il valore mappato per myString se dovesse già esistere.

E se e quando si dispone di una libreria con std::map::emplace è possibile salvare più caratteri.

+0

Credo che dovrebbe essere compilato come c + 11, come taggato. Compilano sotto gcc 4.7.2, clang-3.2 e intel C++ 2013.2 –

+0

L'estensione del supporto C++ 11 in MSVC++ 2012 è mostrata qui: http://msdn.microsoft.com/en-gb/library/vstudio/hh567368 aspx. Non supporta gli elenchi di inizializzatori, tra molto altro. –

+0

@ShmilTheCat E [ecco qui] (http://cpprocks.com/c11-compiler-support-shootout-visual-studio-gcc-clang-intel/) una buona tabella di confronto per il supporto di funzionalità C++ 11 in VC 2012 Nov CTP, GCC 4.8, Clang 3.3 e compilatore Intel 13. Detto questo: hai installato e abilitato CTP? –