簡體   English   中英

C ++檢查向量中的值是否存在於不同的向量中

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

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