如何从对向量中提取第二个元素?

时间:2014-07-08 22:50:42

标签: c++ stl

这是一个初学者问题 - 我对C ++的标准库没有太多帮助。

我有一个包含我使用make_pair创建的元素对的向量。接下来,我对向量中的元素进行了排序。现在,我想从存储在向量中的每对中提取第二个元素。我知道我可以在标准库中使用for_each函数,但这只允许你指定一个lambda函数。 如何提取第二个元素以便将其放入单独的OpenCV Mat?请帮助:)

修改 我写了一个小for_each函数,它接受向量进行排序,遍历每对的向量,并输出到cmd每对中的元素。相反,我想在向量上使用for循环迭代,提取每对,并提取第二个元素。 :)

typedef std::pair<float, int> value;

vector2Sort.push_back( std::make_pair(Matches.col(c).at<float>(r),r) );

std::sort(vector2Sort.begin(), vector2Sort.end(),
    [&](const value& v1, const value& v2)
      {
        return v1.first < v2.first;
      });

std::for_each(vector2Sort.begin(),
    vector2Sort.end(),[&](const vector2Sort& v)
{
 // TODO: put second element in OpenCV Mat
 // display output
 std::cout << v.second << ": " << static_cast<int>(v.first) << std::endl;
});

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你可以用:

提取第二个元素
template<class T1, class T2>
static void extract_second(const vector<pair<T1, T2> >& v, vector<T2>& v2) {
    v2.resize(v.size());
    for (size_t i = 0; i < v.size(); i++) {
        v2[i] = v[i].second;
    }
}

如果你想使用lambda之外的值对lambda中的第二个元素做一些事情,因为你通过引用[&]捕获了上下文中的所有元素,你可以例如做:

vector<float> snds;
std::for_each(vector2Sort.begin(),
    vector2Sort.end(),[&](const vector2Sort& v)
{
   snds.push_back(v.second);
   // display output
   std::cout << v.second << ": " << static_cast<int>(v.first) << std::endl;
});

这就是你在问什么?