2010-05-17 10 views
6

Ho cercato di inizializzare una mappa di <ints, vector<ints> > utilizzando il nuovo standard 0X, ma non riesco a ottenere la sintassi corretta. Mi piacerebbe fare una mappa con una singola voce con chiave: value = 1: 3,4 <>Utilizzo di una lista initializer su una mappa di vettori

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

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

.... 

Muore con il seguente errore 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>)

Modifica

Seguendo il suggerimento di cremagliera e aggiungendo la parentesi in più ora compila con un avvertimento che può essere deciso di eliminare utilizzando il flag -fno-dedurre-init-list. C'è qualche pericolo nel farlo?

+0

non ti manca un tutore? – YGL

+0

@ YGL - risolto grazie. Comunque non risolve il problema originale. – Hooked

+0

In 4.4.1 il compilatore subisce un esaurimento nervoso (errore interno). Forse con 4.5 funziona correttamente? – ergosys

risposta

1

Come il commento è accennato in precedenza, {1,{3,4}} è un singolo elemento nella mappa, in cui la chiave è 1 e il valore è {3,4}. Quindi, quello di cui avresti bisogno è { {1,{3,4}} }.

Semplificare l'errore:

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

Non è un errore di preciso, ma un po 'utile comunque.

Problemi correlati