首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配两个std::向量之间的元素

匹配两个std::向量之间的元素
EN

Stack Overflow用户
提问于 2017-10-12 12:33:26
回答 1查看 697关注 0票数 0

我正在编写一个评估光流的模块。在每个时间步骤中,它使用一个std::向量,其中向量的每个元素都是当前像素位置和前一个像素位置。向量不是有序的。以前没有看到的新像素将出现,未被发现的流位置将消失。是否有正确的方法将新矢量中的元素匹配到正在估计的光流位置集合?

向量的阶数为2000元素。

以下是我所考虑的方法:

  • 天真地遍历每一个估计光流位置的新矢量
  • 天真地遍历新的向量,但删除每个匹配的位置,这样搜索就会更快。
  • 运行std::在我的列表和新列表中的每一步排序。然后从上次匹配的索引+1开始迭代新的向量。

我怀疑是否有一个被接受的方法来做这件事,但我没有任何的科普训练。

我在c++ 11,如果这是相关的话。

代码语言:javascript
复制
// 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();
        }
}
EN

回答 1

Stack Overflow用户

发布于 2017-10-12 15:57:57

不确定您需要什么,但是假设您的Matcher是用整数的向量构造的,顺序并不重要,并且在匹配时需要检查这个向量(方法matchOpticalFlowNaive())来做某事,我想您可以这样写

代码语言:javascript
复制
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,或无序集/多集)的向量构造的?简化matchOpticalFlowNaive()中的工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46709717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档