我有一个std :: vector,其元素类型为std :: pair。使用一些算法,我返回两个迭代器(范围),所以我想获取该范围内的所有元素并将该对的第一个条目复制到另一个向量
std::vector< pair<double, int> > data;
std::vector<double> data2;
std::vector< pair<double, int> >::iterator it1, it2;
for (;it1!=it2; it1++)
{
data2.push_back(it1->first);
}
使用循环会这样做,但我想知道是否有一个简单的stl算法来做到这一点。由于数据大小如果相当大且上面的操作将重复多次,使用循环非常慢。
答案 0 :(得分:3)
如果您正在使用算法为您执行此操作,则可以使用std::transform
的四参数重载:
#include <algorithm> // for transform
#include <iterator> // for back_inserted and distance
....
std::vector< pair<double, int> > data;
std::vector<double> data2;
data2.reserve(std::distance(it1, it2));
std::transform(it1,
it2,
std::back_inserter(data2),
[](const std::pair<double, int>& p){return p.first;});
如果您没有C ++ 11支持,则可以使用函数而不是lambda表达式:
double foo(const std::pair<double, int>& p) { return p.first; }
std::transform(it1,
it2,
std::back_inserter(data2),
foo);
答案 1 :(得分:0)