[英]match elements between two std::vectors
我正在编写一个估算光流量的模块。 在每个时间步上,它消耗一个std :: vector,其中向量的每个元素都是当前像素位置和先前像素位置。 该向量未排序。 将会出现以前看不见的新像素,而找不到的流位置将消失。 是否有正确的方法将新矢量中的元素与要估计的一组光流位置进行匹配?
向量约为2000个元素。
这些是我正在考虑的方法:
我怀疑有解决此问题的公认方法,但是我没有任何专业科学训练。
如果相关,我在c ++ 11中。
// each element in the new vector is an int. I need to check if
// there are matches between the new vec and old vec
void Matcher::matchOpticalFlowNaive(std::vector<int> new_vec)
{
for(int i = 0; i < this->old_vec.size(); i++)
for(int j =0; j < new_vec.size(); j++)
if(this->old_vec[i] == new_vec[j]){
do_stuff(this->old_vec[i], new_vec[j])
j = new_vec.size();
}
}
不知道您需要什么,但是假设您的Matcher
是用整数向量构造的,那么顺序并不重要,并且您需要与其他向量(方法matchOpticalFlowNaive()
)一起检查该向量以在需要时进行处理有一个匹配项,我想您可以编写如下内容
struct Matcher
{
std::set<int> oldSet;
Matcher (std::vector<int> const & oldVect)
: oldSet{oldVect.cbegin(), oldVect.cend()}
{ }
void matchOpticalFlowNaive (std::vector<int> const & newVec)
{
for ( auto const & vi : newVec )
{
if ( oldSet.cend() != oldSet.find(vi) )
/* do something */ ;
}
}
};
其中Matcher
对象是使用向量构造的,该向量用于初始化std::set
(或std::multi_set
或无序set / multiset?),以简化matchOpticalFlowNaive()
的工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.