📌  相关文章
📜  快速检查两个STL向量是否包含相同的元素(1)

📅  最后修改于: 2023-12-03 14:54:19.545000             🧑  作者: Mango

快速检查两个STL向量是否包含相同的元素

如果您需要在C++中检查两个STL向量是否包含完全相同的元素,有一些简单的方法可以帮助您完成这项任务。

方法一:使用无序集合

使用无序集合是一种快速易用的方法,因为它可以使您更轻松地检查两个向量是否完全相同。这可以通过以下步骤来完成:

  1. 将第一个向量中的所有元素插入无序集合中
  2. 遍历第二个向量,并检查每个元素是否存在于无序集合中
  3. 如果所有元素都包含在无序集合中,则两个向量相同

下面是一个使用无序集合来检查两个向量是否相同的示例代码:

#include <iostream>
#include <vector>
#include <unordered_set>

bool containsSameElements(std::vector<int>& v1, std::vector<int>& v2)
{
    if (v1.size() != v2.size())
    {
        return false;
    }

    std::unordered_set<int> s1(v1.begin(), v1.end());

    for (auto i : v2)
    {
        if (s1.find(i) == s1.end())
        {
            return false;
        }
    }

    return true;
}

int main()
{
    std::vector<int> v1 {1, 2, 3, 4};
    std::vector<int> v2 {2, 1, 4, 3};

    bool containsSame = containsSameElements(v1, v2);

    std::cout << "v1 and v2 contain same elements? " << containsSame << std::endl;

    return 0;
}
方法二:排序并比较

另一种方法是将两个向量都按照相同的顺序排序,并比较它们是否完全相等。这可以通过以下步骤来完成:

  1. 将两个向量都按升序或降序排序
  2. 遍历两个向量,比较每个元素是否相同
  3. 如果所有元素都相同,则两个向量相同

下面是一个使用排序来检查两个向量是否相同的示例代码:

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

bool containsSameElements(std::vector<int>& v1, std::vector<int>& v2)
{
    if (v1.size() != v2.size())
    {
        return false;
    }

    std::sort(v1.begin(), v1.end());
    std::sort(v2.begin(), v2.end());

    for (size_t i = 0; i < v1.size(); ++i)
    {
        if (v1[i] != v2[i])
        {
            return false;
        }
    }

    return true;
}

int main()
{
    std::vector<int> v1 {1, 2, 3, 4};
    std::vector<int> v2 {2, 1, 4, 3};

    bool containsSame = containsSameElements(v1, v2);

    std::cout << "v1 and v2 contain same elements? " << containsSame << std::endl;

    return 0;
}
总结

以上介绍了两种常见的方法来快速检查两个STL向量是否包含相同的元素。您可以根据您的需求选择其中一种方法,从而找到一个快速可靠的解决方案。