Доступ к переменным-членам через лямбда-буст - PullRequest
4 голосов
/ 24 февраля 2010

Я пытаюсь напечатать вторую переменную-член всех элементов в карте stl, используя лямбда-выражение

map<int, int> theMap;
for_each(theMap.begin(), theMap.end(), 
         cout << bind(&pair<int, int>::second, _1) << constant(" "));

но это не компиляция. По сути, я хочу отменить ссылку на заполнитель. Есть идеи, что мне здесь не хватает?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 24 февраля 2010

Попробуйте:

for_each(theMap.begin(), theMap.end(), 
         cout << bind(&map<int, int>::value_type::second, _1) << constant(" "));
2 голосов
/ 24 февраля 2010

std::map добавит const к своему ключу; это чтобы не испортить порядок. Ваша пара должна быть:

std::pair<const int, int>

Как предлагает Dirkgently, используйте value_type, чтобы всегда получать правильный тип. Многословие смягчается с помощью typedef:

typedef std::map<int, int> int_map;

int_map::value_type::second
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...