这是一个初学者问题 - 我对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;
});
答案 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;
});
这就是你在问什么?