[英]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.