C ++如何检查向量的内容是否存在于另一个向量中?

时间:2018-03-23 02:43:25

标签: c++ vector int

我正在尝试编写一个程序来检查一个向量的内容是否存在于另一个向量中。例如:

vector<int> a = {1, 2};
vector<int> b = {6, 5, 3, 1, 9, 2};

比较这两个向量时会返回true,因为a的内容存在于b的某个位置。

vector<int> a = {1, 2}
vector<int> b = {3, 1, 5, 6}

这会返回false,因为ab中的所有都不存在。

我已经尝试使用while循环,但我对如何让循环中断感到困惑。

bool check_vec(vector<int> a, vector<int> b){

    int checker = 0;

    int i = 0;
    int q = 0;

    while ( true ) {
        if(b.at(i) == a.at(q)) {
            checker++;
            i = 0;
            q++;
            if(checker == a.size())
                return true;

            i++;

        }
    }
}

2 个答案:

答案 0 :(得分:3)

使用循环迭代第一个向量的内容。您不需要第二个向量的循环,只需使用std::find

for (auto a_elt: a) {
    if (std::find(b.begin(), b.end(), a_elt) == b.end()) {
        return false;
    }
}
return true;

您还可以使用std::all_of

return std::all_of(a.begin(), a.end(), [](int a_elt) {
    return std::find(b.begin(), b.end(), a_elt) != b.end();
});

答案 1 :(得分:0)

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>

int main() {

    std::vector<int> a = {1, 2};
    std::vector<int> b = {6, 5, 3, 1, 9, 2};

    vector<int> c( a.size() + b.size() );
    std::cout "\nFirst vector values are ...\n";
    std::copy( a.begin(), a.end() std::ostream_iterator<int>( std::cout, "\t" );
    std::cout << '\n';

    std::cout << "\nSecond vector values are ...\n" << endl;
    std::copy( b.begin(), b.end(), std::ostream_iterator<int>( std::cout, "\t" );
    std::cout << '\n';

    auto pos = std::set_difference( a.begin(), a.end(), b.begin(), b.end(), c.begin() );
    c.resize( pos - c.begin() );

    std::cout << "\nValues present in vector one but not in vector two are ...\n";
    std::copy( c.begin(), c.end(), std::ostream_iterator<int>( cout, "\t" ) );
    std::cout << '\n';

    c.clear();
    c.resize( a.size() + b.size() );

    pos = std::set_union( a.begin(), a.end(), b.begin(), b.end(), c.begin() );
    v.resize( pos - c.begin() );

    std::cout << "\nMerged vector values in vector are ...\n";
    std::copy( c.begin(), c.end(), std::ostream_iterator<int>( cout , "\t" ) );
    std::cout << "\n\n";

    std::cout << "\nPress any key and enter to quit.\n";
    std::cin.get();

    return 0;
}