используя boost :: bind с картой - PullRequest
1 голос
/ 13 марта 2012
    bool takeInt(int a,int b) 
    {
      cout << a << " " << b << endl;   return true;
    } 

    int main()
    { 
      map<int,int> m;
      m.insert(make_pair(1,2));
      m.insert(make_pair(2,5));
      m.insert(make_pair(4,8));
      m.insert(make_pair(5,6));
for_each(m.begin(),m.end(),boost::bind(&takeInt,42,boost::bind(&pair<int,int>::first,_1)));
     return 0;
    }

Я хочу вывод

42 1
42 2
42 4
42 5

Сбой компиляции с ошибками loong.Любая подсказка о том, что мне не хватает?

1 Ответ

1 голос
/ 13 марта 2012

Тип map<T, U>::value_type равен pair<const T, U>. Используйте это:

for_each(m.begin(),m.end(),
         boost::bind(&takeInt, 42, boost::bind(&pair<const int,int>::first,_1)));
                                                     ^^^^^
...