[英]C++ check if a value from a vector exists in a different vector
我有3個問題的載體。 其中兩個向量已包含值
v1 = {test1,test2,test3,test4,test5}
v2 = {test1, test2, random}
我想要做的是檢查v1中是否存在v2中的任何值,並將該值添加到名為v3的向量中。 所以例如當我循環通過v3時,輸出應該是: random
我還想指出v1和v2的大小可以更大但v1總是更大。 我只需要有人幫助我,並指出我正確的方向。 謝謝
還有一種方法我可以做一個檢查讓我們說如果v2中的所有值都在v1中這樣做但是如果v2中有任何值不在v2中那么執行set_difference?
你有一個算法, set_difference
:
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
int main() {
std::vector<int> v1 = { 10, 2, 3, 4, 5 };
std::vector<int> v2 = { 2, 4, 666, 1 };
std::sort(begin(v1),end(v1));
std::sort(begin(v2),end(v2));
std::vector<int> v3;
v3.reserve( v2.size() ); // no more than one allocation
std::set_difference( begin(v2), end(v2), begin(v1), end(v1), std::back_inserter(v3) );
for( auto e : v3 )
std::cout << e << ", ";
}
就我而言,以下功能將有效:
template<typename T>
vector<T> contain(const vector<T>& v1, const vector<T>& v2)
{
vector<T> v3;
for (int i = 0; i < (int)v2.size(); i++) {
for (int j = 0; j < (int)v1.size(); j++) {
if (v2[i] == v1[j]) v3.push_back(v1[i]);
}
}
return v3;
}
在這里,我們只是遍歷v2的每個條目並檢查v1是否包含它,如果是,我們將此值添加到v3。 復雜度是n^2
但是如果模板參數是可比較的,則可以通過對向量進行排序來實現n*log(n)
。
std::sort(v1.begin(), v1.end());
std::sort(v2.begin(), v2.end());
std::set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), std::back_inserter(v3));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.