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

C++ 如何从成对向量中提取第二个元素?,c++,stl,C++,Stl,这是一个初学者的问题-我没有太多地使用C++的标准库 我有一个向量,它包含我使用make\u pair创建的元素对。接下来,我对向量中的元素进行排序。现在,我想从向量中存储的每一对中提取第二个元素。我知道我可以对标准库中的每个函数使用,但这只允许您指定lambda函数。如何提取第二个元素,以便将其放入单独的OpenCV Mat中?请帮忙:) 编辑 我为每个函数编写了一个小的,它接收向量进行排序,迭代每对向量,并将每对中的元素输出到cmd。相反,我想在向量上使用for-循环进行迭代,提取每一对,然

这是一个初学者的问题-我没有太多地使用C++的标准库

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

编辑 我为每个
函数编写了一个小的
,它接收向量进行排序,迭代每对向量,并将每对中的元素输出到
cmd
。相反,我想在向量上使用
for
-循环进行迭代,提取每一对,然后提取第二个元素。:)

typedef std::对值;
vector2Sort.push_-back(std::make_-pair(Matches.col(c).at(r),r));
std::sort(vector2Sort.begin()、vector2Sort.end(),
[&](常量值和v1,常量值和v2)
{
返回v1.firststd::cout如果我理解正确,您可以使用以下内容提取第二个元素:

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;
    }
}

这就是你要问的吗?

提取是什么意思?元素就在那里,请随意处理。不确定提取是什么意思但是,要得到第二个元素,这就是它的发音:<代码> v.2.. /COD> .<代码> Fuffy/<代码>是一个函数,而不是一个类。这看起来不像C++初学者问题。在最近的编辑中,你试过把第二个元素放在OpenCV垫中吗?啊,开枪。我没想到把它放进你使用for循环的方式。看看我现在怎么做。谢谢!:)np.BTW,在
排序
行中,您可以省略自定义的比较运算符,因为std::pair比较第一个组件T1(升序)默认情况下。如果T1中有两个元素的关系,则排序将在T2上进行比较。使用transform似乎更适合此特定作业:
std::transform(v.begin()、v.end()、std::back_inserter(dst),[](auto p){return p.second;});
是的,这更适合STL。
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;
    }
}
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;
});