Как передать параметр лямбда-выражения по ссылке для C ++ 0x

Я использую лямбда-выражение C ++ 0x для изменения значений карты.

Однако, возникли трудности при передаче итератора карты по ссылке.

Если я просто передаю итератор по значению, например: [] (std :: pair iter) , он компилируется нормально, но значения соответствуют не обновляться на карте.

Если я попытаюсь передать итератор по ссылке, например [] (std :: pair & iter) компилятор 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;
}

Спасибо

6
задан Motti 5 October 2010 в 09:16
поделиться