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

ty1*_*ty1 0 c++ int vector

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

vector<int> a = {1, 2};
vector<int> b = {6, 5, 3, 1, 9, 2};
Run Code Online (Sandbox Code Playgroud)

当比较这两个向量时,这将返回 true,因为 的内容a存在于 中的某处b

vector<int> a = {1, 2}
vector<int> b = {3, 1, 5, 6}
Run Code Online (Sandbox Code Playgroud)

这将返回 false,因为并非所有内容都a存在于 中b

我已经尝试使用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++;

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 6

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

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

您还可以使用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();
});
Run Code Online (Sandbox Code Playgroud)