2010-05-17 14 views
6

He estado tratando de inicializar un mapa de <ints, vector<ints> > usando el nuevo estándar 0X, pero parece que no puedo obtener la sintaxis correcta. Me gustaría hacer un mapa con una sola entrada con llave: valor = 1: 3,4 <>Uso de un initializer_list en un mapa de vectores

#include <initializer_list> 
#include <map> 
#include <vector> 
using namespace std; 

map<int, vector<int> > A = {1,{3,4}}; 

.... 

Se muere con el siguiente error con gcc 4.4.3:

error: no matching function for call to std::map<int,std::vector<int,std::allocator<int> >,std::less<int>,std::allocator<std::pair<const int,std::vector<int,std::allocator<int> > > > >::map(<brace-enclosed initializer list>)

Editar

Siguiendo la sugerencia de la rueda dentada y la adición de la llave extra que ahora compila con la advertencia de que puede ser librado de la utilización de la bandera-init-list--fno deducir. ¿Hay algún peligro al hacerlo?

+0

¿No te estás perdiendo un corsé? – YGL

+0

@ YGL: gracias fijas. Aun así, no resuelve el problema original. – Hooked

+0

En 4.4.1, el compilador sufre un ataque de nervios (error interno). Tal vez con 4.5 funciona correctamente? – ergosys

Respuesta

1

Como el comentario anterior ha mencionado, {1,{3,4}} es un elemento único en el mapa, donde la clave es 1 y el valor es {3,4}. Entonces, lo que necesitaría es { {1,{3,4}} }.

Simplificar el error:

error: no matching function for call to map<int,vector<int>>::map(<brace-enclosed initializer list>) 

No es un error de precisión, pero algo útil, no obstante.

Cuestiones relacionadas