gpt4 book ai didi

c++ - 如何将 vector 中 pair 的第一个元素复制到另一个 vector ?

转载 作者:行者123 更新时间:2023-11-30 02:53:32 41 4
gpt4 key购买 nike

我有一个带有 std::pair 类型元素的 std::vector。通过某种算法,我返回了两个迭代器(范围),因此我想获取该范围内的所有元素并将该对的第一个条目复制到另一个 vector

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 算法可以做到这一点。由于数据量很大,而且以上操作会重复多次,所以使用循环很慢。

最佳答案

如果您正在寻找一种算法来为您执行此操作,则可以使用 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);

关于c++ - 如何将 vector 中 pair 的第一个元素复制到另一个 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17911639/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com