2013-03-31 14 views
5

Podczas używania std :: array mogę przypisać wartości w tym samym czasie:Przypisywanie wielu wartości do std :: tablicy w std :: map

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

Ale ja nie wiem, że najlepszym sposobem, aby zrobić to, gdy powyższa tablica jest łączona na mapie:

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; 

Proszę również dać mi znać, czy to rzeczywiście jest właściwa droga. Dzięki!

Odpowiedz

4

Podczas korzystania insert jak pokazano w drugiej odpowiedzi jest bardziej wydajne, można również użyć

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

jeśli kod zwięzły jest dla ciebie ważniejsze.

+0

@ShmilTheCat Pytanie dotyczy C++ 11 i nie wskazuje na potrzebę konkretnego kompilatora. Działa z GCC 4.6.3, GCC 4.7.2, GCC 4.8.0 i Clang 3.2. Jest to zgodne ze standardem C++ 11. –

2

można zapisać linię (choć nie wiele znaków) tak:

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

BTW, zgodnie z GCC 4.7.2 brakuje parę szelek całym inicjatora dla tempArray

jednak nie zmodyfikuje odwzorowanej wartości dla myString, jeśli już istnieje.

A jeśli i kiedy masz bibliotekę, która ma std::map::emplace, możesz zapisać więcej znaków.

+0

Wierzę, że powinno się skompilować jako c + 11, jak oznaczono. Kompiluje się pod gcc 4.7.2, clang-3.2 i intel C++ 2013.2 –

+0

Zakres obsługi języka C++ 11 w MSVC++ 2012 pokazano tutaj: http://msdn.microsoft.com/en-gb/library/vstudio/hh567368 .aspx. Nie obsługuje list inicjalizujących ani innych. –

+0

@ ShmilTheCat And [here's] (http://cpprocks.com/c11-compiler-support-shootout-visual-studio-gcc-clang-intel/) dobry wykres porównawczy dla obsługi funkcji C++ 11 w VC 2012 Nov CTP, GCC 4.8, Clang 3.3 i kompilator Intel 13. Powiedziałeś: Czy zainstalowałeś i włączyłeś CTP? –

Powiązane problemy