2012-03-13 5 views
1
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

Тип 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))); 
                ^^^^^ 
+0

из любопытства: где находилось определение карты :: value_type? @myself: просто посмотрел определение на cpp.com, и он cleary говорит value_type: 'pair ' –

+0

@CarstenGreiner В этом случае я был уверен, в противном случае я смотрю его в стандарте (обычно проект N3337 http: // open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3337.pdf) или сама реализация библиотеки. – pmr

+1

Из этого я научился всегда использовать typedef, если это не возможно. 'boost :: bind (& Map :: value_type :: first, _1)' – balki

Смежные вопросы