Предположим, у меня есть следующие контейнеры:
vector<string> input = assign::list_of("one")("two")("three")("four");
vector<map<string, int> > result;
И скажем, я хочу, чтобы результат выглядел примерно так:
{{"one", 1}, {"two", 1}, {"three", 1}, {"four", 1}}
Я хотел бы использовать алгоритм STL, я думаю, что либо transform, либо for_each должны быть в порядке. Для преобразования у меня есть код:
transform(input.begin(), input.end(), back_inserter(result), boost::bind(assign::map_list_of(_1, 1)));
Но это приводит к ошибке компиляции типа без типа с именем ‘result_type’ в ‘class boost :: assign_detail :: generic_list, int>>’
Для for_each у меня есть код:
for_each(input.begin(), input.end(),
boost::bind<void, void(std::vector<std::map<std::string, int> >::*)(const map<string, int>&)>(
&std::vector<std::map<std::string, int> >::push_back,
&result,
assign::map_list_of(_1, 1)));
Но это приводит к ошибке компиляции, которая в итоге: нет совпадения для вызова '(boost :: _ mfi :: dm, int> &), std :: vector, int>>>) (std :: vector, int>> * &, boost :: assign_detail :: generic_list, int>> &) '
Как правильно это сделать? Обратите внимание, что я не могу использовать C ++ 11 и хотел бы использовать boost_bind в сочетании с алгоритмом STL только для того, чтобы больше узнать о boost :: bind.
Комментарий WRT @ Joachim о вызове map_list_of, я сделал следующую модификацию:
for_each(input.begin(), input.end(),
boost::bind<void, void(std::vector<std::map<std::string, int> >::*)(const map<string, int>&)>(
&std::vector<std::map<std::string, int> >::push_back,
&result,
boost::bind<void, map<string, int>(const string&, int)>(&assign::map_list_of, _1, 1));
Что приводит к ошибке компиляции: невозможно преобразовать '& boost :: assign :: map_list_of' (type '') в тип 'std :: map, int> (*) (const std :: basic_string &, int)' < / сильный>
boost::assign::map_list_of
в вашемboost::bind
вызове неправильно, поскольку вы на самом деле вызываете функциюmap_list_of
, передавая ее результат в качестве функции для вызова (что, конечно, приведет к ошибкам). - person Some programmer dude   schedule 11.08.2014