Sto usando un'espressione lambda C++ 0x per modificare i valori di una mappa.Come passare parametri espressione lambda da riferimento per C++ 0x
Tuttavia, avendo difficoltà a passare l'iteratore della mappa per riferimento.
Se ho appena passato l'iteratore, per valore come: [](std::pair<TCHAR, int > iter)
, esso viene compilato correttamente, ma i valori non vengono aggiornati nella mappa.
Se provo a passare l'iteratore per riferimento, come ad esempio il compilatore VS2010 [](std::pair<TCHAR, int >& iter)
lamenta che
cannot convert paramater from 'std::pair<_Ty1,_Ty2>' to 'std::pair<_Ty1,_Ty2> &'
Ecco il codice. Apprezza le informazioni su come gli oggetti std :: map possono essere modificati utilizzando le espressioni lambda.
#include <tchar.h>
#include <map>
#include <algorithm>
#include <vector>
int _tmain(int argc, _TCHAR* argv[])
{
typedef std::map<TCHAR, int > Map;
Map charToInt;
charToInt[_T('a')] = 'a';
charToInt[_T('b')] = 'b';
charToInt[_T('c')] = 'c';
charToInt[_T('d')] = 'd';
std::for_each(charToInt.begin(), charToInt.end(), [](std::pair<TCHAR, int >& iter)
{
int& val = iter.second;
val++;
});
return 0;
}
Grazie
+1 per la diagnosi di problemi HTE, ma una soluzione migliore sarebbe utilizzando 'Map :: value_type &' come l'intento è più chiara e meno soggetto a errori. –
Grazie - i suggerimenti stanno funzionando. –