0
4

2 回答 2

1

尝试这个:

#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;    
}
于 2014-08-11T15:25:20.590 回答
0
BOOST_FOREACH(const std::string& str, input)
  result[str] = 1;

我意识到这不使用 STL 算法和 Boost.Bind,但它简洁直观。

于 2014-08-11T12:50:45.630 回答