Я использую лямбда-выражение C ++ 0x для изменения значений карты.
Однако, возникли трудности при передаче итератора карты по ссылке.
Если я просто передаю итератор по значению, например: [] (std :: pair
, он компилируется нормально, но значения соответствуют не обновляться на карте.
Если я попытаюсь передать итератор по ссылке, например [] (std :: pair
компилятор VS2010 жалуется, что это
cannot convert paramater from 'std::pair<_Ty1,_Ty2>' to 'std::pair<_Ty1,_Ty2> &'
Вот код. Оцените информацию о том, как объекты std :: map могут быть изменены с помощью лямбда-выражений.
#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;
}
Спасибо