mi piacerebbe un'iterazione su uno std :: mappa utilizzando BOOST_FOREACH e modificare i valori. Non riesco a capirlo.utilizzando BOOST_FOREACH con std :: map
typedef std::pair<int, int> IdSizePair_t;
std::map<int,int> mmap;
mmap[1] = 1;
mmap[2] = 2;
mmap[3] = 3;
BOOST_FOREACH(IdSizePair_t i, mmap)
i.second++;
// mmap should contain {2,3,4} here
Ovviamente questo non cambia nulla perché non sto iterando per riferimento. Così mi sostituisco questa linea, invece (come per esempio nella documentazione Boost):
BOOST_FOREACH(IdSizePair_t &i, mmap)
e ottengo l'errore del compilatore:
error C2440: 'initializing' :
cannot convert from 'std::pair<_Ty1,_Ty2>' to 'IdSizePair_t &'
with
[
_Ty1=const int,
_Ty2=int
]
Qualche suggerimento?
Cosa compilatore stai usando? Ho provato il tuo codice su VS2008 e ha funzionato correttamente. Ho provato anche hvint [risposta] (http://stackoverflow.com/questions/795443/using-boostforeach-with-stdmap/795482#795482) e ha funzionato. Sto usando la spinta 1.36, se questo è importante. –
probabilmente hai dimenticato il &? senza quello, copia l'altra coppia, e la costanza non avrà importanza allora. –