2013-09-05 4 views
1

Моих следующие простая программа повышающей лямбды извергает следующее сообщение об ошибке:вложенного использования наддува :: привязка к ускорению :: лямбда не работает

maxInMap.cpp:29:71: instantiated from here /usr/include/boost/lambda/detail/function_adaptors.hpp:264:15: error: invalid initialization of reference of type ‘std::vector<int>&’ from expression of type ‘const std::vector<int>’

Пожалуйста, помогите мне в понимании этого вопроса, как это было бы помочь мне в общий прирост Lambda

#include <map> 

#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <iterator> 

#include <boost/lambda/lambda.hpp> 
#include <boost/lambda/if.hpp> 
#include <boost/lambda/algorithm.hpp> 
#include <boost/lambda/bind.hpp> 

using namespace std ; 
using namespace boost ; 
using namespace boost::lambda ; 

int main() 
{ 
    map<int, vector<int> > intVecMap ; 
    int vecSizes[] = {3, 6, 2, 9, 5, 8, 1, 7, 10, 4} ; 
    for (int i = 0; i < 10; i++) 
     intVecMap[i] = vector<int>(vecSizes[i], i) ; 

    map<int, vector<int> >::const_iterator itr = 
     max_element(intVecMap.begin(), intVecMap.end(), 
        (bind(&vector<int>::size, 
          bind(&pair<int, vector<int> >::second, _1)) < 
        bind(&vector<int>::size, 
          bind(&pair<int, vector<int> >::second, _2)))) ; 
    if (itr == intVecMap.end()) 
     cout << "Max Element function could not find any max :-(\n" ; 
    else 
     cout << "Max Index = "<<(*itr).first<<" Size = "<<(*itr).second.size()<<endl ; 
    return 0 ; 
} 

ответ

4

ошибка на самом деле не связано с Boost.Lambda или Boost.Bind, это проблема:

     bind(&pair<int, vector<int> >::second, _2)))) ; 

value_type из map<int, vector<int> > не pair<int, vector<int>> это pair<const int, vector<int>>

Если вы меняете оба вхождения pair<int, в pair<const int, он должен компилировать.

(Причина, по которой map имеет const типа ключа, чтобы помешать вам недействительность упорядоченности карты пути изменения ключа элемента.)

+0

Спасибо большого Джонатон, что на самом деле был вопрос. – user2751632

+1

Затем вы должны принять ответ –

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

  • Нет связанных вопросов^_^