簡體   English   中英

匹配兩個std :: vectors之間的元素

[英]match elements between two std::vectors

我正在編寫一個估算光流量的模塊。 在每個時間步上,它消耗一個std :: vector,其中向量的每個元素都是當前像素位置和先前像素位置。 該向量未排序。 將會出現以前看不見的新像素,而找不到的流位置將消失。 是否有正確的方法將新矢量中的元素與要估計的一組光流位置進行匹配?

向量約為2000個元素。

這些是我正在考慮的方法:

  • 對於每個估計的光流位置,天真地遍歷新矢量
  • 天真地遍歷新向量,但刪除了每個匹配的位置,因此隨着搜索的進行,搜索變得更快
  • 在每個時間步上在我的列表和新列表上運行std :: sort。 然后從最后一個匹配索引+1開始遍歷新向量

我懷疑有解決此問題的公認方法,但是我沒有任何專業科學訓練。

如果相關,我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM