_pimpl->_connections
是std::map
,因此其元素为std::pair<KeyType, gcl::SectionConnectionT*>
我想使用谓词gcl::SectionConnectionT::NotConnectedTo(r)
来过滤掉不必要的值。但如果我使用
std::remove_copy_if(it_pair.first, it_pair.second, std::back_inserter(sectionConnections), gcl::SectionConnectionT::NotConnectedTo(r));
尝试将pair
插入到矢量中。但是矢量的类型为<gcl::SectionConnectionT*>
。某些谷歌搜索将我带到transform_iterator
,我无法理解如何理解。我这样用它。但得到汇编错误
std::pair<CollectionT::iterator, CollectionT::iterator> it_pair = _pimpl->_connections.equal_range(l);
std::vector<gcl::SectionConnectionT*> sectionConnections;
std::remove_copy_if(it_pair.first, it_pair.second, boost::make_transform_iterator(std::back_inserter(sectionConnections), util::shorthand::pair_second()), gcl::SectionConnectionT::NotConnectedTo(r));
答案 0 :(得分:1)
Boost.Iterator库可能无法推断出until::shorthand::pair_second::operator()(CollectionT::value_type&) const
的返回类型,因此返回的transform_iterator
不会对Writable Lvalue Iterator概念进行建模,因为需要将其用于第三个参数到std::remove_copy_if
(输出迭代器)。
以下作品:
//#include <boost/lambda/bind.hpp>
//#include <boost/lambda/lambda.hpp>
//#include <boost/range/adaptor/map.hpp>
//#include <boost/range/algorithm/remove_copy_if.hpp>
//namespace gcl {
//struct SectionConnectionT {
// bool NotConnectedTo(RType r) const;
// // ...
//};
//}
boost::remove_copy_if(it_pair | boost::adaptors::map_values,
std::back_inserter(sectionConnections),
boost::lambda::bind(&gcl::SectionConnectionT::NotConnectedTo, boost::lambda::_1, r));