假设我有以下容器:
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,我有代码:
transform(input.begin(), input.end(), back_inserter(result), boost::bind(assign::map_list_of(_1, 1)));
但这会产生编译错误沿着在“class boost::assign_detail::generic_list,int〉〉”中没有名为“result_type”的类型
对于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::向量,int〉〉〉)(std::向量,int〉〉*&,boost::赋值详细信息::通用列表,int〉〉&)“时没有匹配项
正确的方法是什么?请注意,我不能使用C++11,我想结合STL算法使用boost_bind,只是为了学习更多关于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”(类型“”)转换为类型“std::map,int〉(*)(常量标准::basic_string&,int)”
2条答案
按热度按时间kfgdxczn1#
试试这个:
flseospp2#
我知道这没有使用STL算法和Boost.Bind,但它简洁直观。