目的是檢查兩個集的不相交與否,這裏是到目前爲止的代碼:如何檢查兩組是否不相交?
#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;
}
然而,如圖評論,我得到一個問題,當我嘗試檢查元素是否存在無序集合:
無效的操作數的二進制表達式( 'INT' 和 '遊標'(又名 '__hash_const_iterator *>'))
我試圖指請打開文檔this和this,但它無助於解決問題,但由於我來自Java背景,使我更加困惑。任何幫助解決這個問題將不勝感激!謝謝。
查看[std :: set_difference](http://en.cppreference.com/w/cpp/algorithm/set_difference) –
@JesperJuhl - 「std :: set_difference」需要**排序的**輸入序列;儘管有其名稱,但它不適用於未分類集。 –
如果你想使用O(n^2)算法,你不需要將數據複製到那些中間的'std :: unordered_set';只需在數組上進行搜索和比較。對於更大的數據集,可以對數組進行排序或將數據複製到兩個「std :: set」對象中,然後使用「std :: set_difference」。 –