Używam wyrażenie lambda C++ 0x do modyfikowania wartości mapy.Jak przekazać parametr wyrażenia Lambda przez odniesienie do C++ 0x
Jednak mając trudności z przekazywaniem iteratora mapy przez odniesienie.
Jeśli po prostu przekazać iterator, przez wartość taką jak: [](std::pair<TCHAR, int > iter)
kompiluje dobrze, ale wartości nie są aktualizowane na mapie.
Gdy próbuję przekazać iterator przez odniesienie, jak [](std::pair<TCHAR, int >& iter)
kompilator VS2010 narzeka, że
cannot convert paramater from 'std::pair<_Ty1,_Ty2>' to 'std::pair<_Ty1,_Ty2> &'
Oto kod. Doceń informacje o tym, jak obiekty std :: map mogą być modyfikowane za pomocą wyrażeń 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;
}
Dziękuję
+1 dla diagnozy problemu hte, ale lepszym rozwiązaniem byłoby użycie 'Map :: value_type &', ponieważ intencja jest bardziej przejrzysta i mniej podatna na błędy. –
Dziękuję - sugestie działają. –