c++ - 如何检查两个集合是否不相交?

标签 c++ c++11

目标是检查两个集合是否不相交,目前为止的代码如下:

#include <iostream>
#include <cstdlib>
#include <unordered_set>
using namespace std;

bool isDisjoint(int set1[], int len1, int set2[], int len2); 
int main()
{
    int set1[] = {10, 5, 3, 4, 6};
    int set2[] = {8, 7, 9, 3};
    if (isDisjoint(set1,sizeof(set1),set2,sizeof(set2)))
        cout<<"DISJOINT";
    else
        cout<<"NOT DISJOINT";

    return 0;
}

bool isDisjoint(int set1[], int len1, int set2[], int len2)
{
    unordered_set<int> set;


    for(int i=0;i<len1;i++)
        set.insert(set1[i]);

    for(int j=0;j<len2;j++)
    {
        if(set2[j]==set.find(set2[j]))
    //-----------^^^^-----------------
            return false;

    }

    return true;
}

但是,如评论中所示,当我尝试检查元素是否存在于无序集中时遇到问题:

invalid operands to binary expression ('int' and 'iterator' (aka '__hash_const_iterator *>'))

我尝试引用文档 thisthis ,但是它并没有帮助解决问题,而是让我更加困惑,因为我来自 Java 背景。任何解决此问题的帮助将不胜感激!谢谢。

最佳答案

检查应该针对 set.end(),而不是针对 set2[j]:

if (set.find(set2[j]) != set.end()) {
    ...
}

请注意,您调用 isDisjoint 传递了 sizeof(set1)sizeof(set2),这是不正确的:您应该传递 sizeof(set1)/sizeof(set1[0])std::size(set1)在 C++17 中。

关于c++ - 如何检查两个集合是否不相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46252118/

相关文章:

c++ - 如何将随机整数转换为均匀的实数 [0,1[ 分布

c++ - 无法访问类中的公共(public)字段 | C++

c++ - std::map emplace 因显式构造函数而失败

c++ - 如何使用不同的构造函数从堆栈实例化一个类?

c++ - 将两个 uint8_t 转换为 int16_t 的正确现代方法

android - Renderscript 分配崩溃

c++ - 将枚举类传播到更高级别的类

c++ - 如何在带有访问者的lambda中调用std::visit,访问者是按值捕获的函数对象

c++ - 参数化非类型模板参数?

c++11 - g++ 5.4.0 - 无法使用 C++14 标准