Я использую выражение лямбда C++ 0x для изменения значений карты.Как передать параметр выражения Lambda по ссылке для C++ 0x
Однако, с трудностью передать итератор карты по ссылке.
Если я просто передаю итератор, по значению, например: [](std::pair<TCHAR, int > iter)
, он компилируется отлично, но значения не обновляются на карте.
Если я пытаюсь передать итератор по ссылке, например, [](std::pair<TCHAR, int >& 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;
}
Спасибо
+1 для диагностики проблемы hte, но лучшим решением будет использование «Map :: value_type &», поскольку цель более ясна и менее подвержена ошибкам. –
Спасибо - предложения работают. –