这应该工作:
std::for_each(mybimap.left.begin(),
mybimap.left.end(),
boost::bind(&vector_type::push_back, &myvec,
boost::bind(&map_type::left_map::value_type::second, _1)));
...或者,如果你的意思是映射从替代值映射到键值,使用first
代替second
。
编辑:我觉得这双绑定相当笨拙,并且for_each
非优化算法(copy
会更适合,恕我直言算法名称应说明意图,并在这里,显然是一个副本)。你也可以使用这里transform iterator:
std::copy(boost::make_transform_iterator(mybimap.left.begin(), select_second()),
boost::make_transform_iterator(mybimap.left.end(), select_second()),
std::back_inserter(myvec));
其中select_second
将是一个函数对象,选择对的第二个元素 - 或者只是boost::bind(&map_type::left_map::value_type::second, _1)
。
对于一个情况,我无法用一个transform_iterator
我已经写在这基本上是一个back_inserter
这需要被写入之前应用于元素(没有火箭科学写)的一元函数工作transform_back_inserter
- 那么它看起来像
std::copy(mybimap.left.begin(),
mybimap.left.end(),
transform_back_inserter(myvec, select_second()));
,我更愿意到transform_iterator
时尽可能我没有重复一元函数的名称。
它不工作,因为...(把错误描述在这里)? – liori 2009-09-04 15:01:48