使用boost :: bind和map

时间:2012-03-13 14:44:36

标签: boost bind stdmap

    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

错误编译失败。 关于我缺少什么的任何线索?

1 个答案:

答案 0 :(得分:1)

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)));
                                                     ^^^^^