抱歉,有点初学者问题。有 vector 和 vector 对
typedef std::vector <int> TItems;
typedef std::vector < std::pair <int, int> > TPairs;
有什么方法可以一步将所有第一项成对转换为另一个 vector
int main ()
{
TItems items;
TPairs pairs;
pairs.push_back (std::make_pair(1,3));
pairs.push_back (std::make_pair(5,7));
std::transform( items.begin(), items.end(), items.begin(), comp ( &pairs ) );
return 0;
}
如何设计仿函数?
class comp
{
private:
TPairs *pairs;
public:
comp ( TPairs *pairs_ ) : pairs ( pairs_) { }
unsigned int operator () ( const unsigned int index ) const
{
return (*pairs)[index].second != pairs->end(); //Bad idea
}
};
也许有一些更用户友好的方法,没有 lambda 表达式和循环。感谢您的帮助。
最佳答案
首先,您应该使用 back_inserter
作为 transform
的第三个参数以便将转换后的值推到 vector 的后面。
其次,您需要某种仿函数,它接受一对整数并返回第一个整数。应该这样做:
int firstElement( const std::pair<int, int> &p ) {
return p.first;
}
现在,把各个部分放在一起:
TPairs pairs;
pairs.push_back( std::make_pair( 1, 3 ) );
pairs.push_back( std::make_pair( 5, 7 ) );
TItems items;
std::transform( pairs.begin(), pairs.end(), std::back_inserter( items ),
firstElement );
在此代码之后,items
包含 1 和 5。
关于C++ std::transform vector of pairs->first to new vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9094132/