目标是检查两个集合是否不相交,目前为止的代码如下:
#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 *>'))
我尝试引用文档 this和 this ,但是它并没有帮助解决问题,而是让我更加困惑,因为我来自 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/