result; 然后说我希望结果看起-6ren">
gpt4 book ai didi

c++ - Boost绑定(bind)并分配以将 vector 转换为字符串

转载 作者:行者123 更新时间:2023-11-28 06:44:33 29 4
gpt4 key购买 nike

假设我有以下容器:

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

但这会产生一个编译错误,类似于 no type named ‘result_type’ in ‘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 '') 转换为 type 'std::map, int> (*)(const std::basic_string&, int )'

最佳答案

试试这个:

#include <boost/assign.hpp>
#include <boost/bind.hpp>
#include <vector>
#include <map>
#include <string>

int main()
{
std::vector<std::string> input = boost::assign::list_of("one")("two")("three")("four");
std::vector<std::map<std::string, int> > result;

for_each
(
input.begin()
, input.end()
, boost::bind
(
static_cast<void(std::vector<std::map<std::string, int> >::*)(const std::map<std::string, int>&)>(&std::vector< std::map<std::string, int> >::push_back)
, &result
, boost::bind(&boost::assign::map_list_of<std::string, int>, _1, 1)
)
);

return 0;
}

关于c++ - Boost绑定(bind)并分配以将 vector 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25243580/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com