簡體   English   中英

C ++使用數組設置交集和並集

[英]C++set intersection and union using arrays

我要找到set union的基數,並從數據文件中設置兩組的交集。 我創建了兩個數組(setA []和setB [])來存儲我的數據。 a和b分別是集合A和集合B中的元素數量。 setIntersection應該保存集合A和集合B之間的交集結果。但我仍然堅持如何找到並集和交集。

int printIntersection(int setA[], int setB[], int setIntersection[], int a, int b, int k) 
{
 int i = 0;
 int j = 0;

 while(i < a && j < b)
 {
     if(setA[i] < setB[j])
     {
         i++;
     }

     else if(setA[i] > setB[j])
     {
         j++;
     }

     else if (setA[i] == setB[j])
     {
         setIntersection[k] = setA[i];
         i++;
         j++;
         k++;
     }
     cout<<"Cardinality of intersection is "<<k<<endl;
 }

這段代碼用於交叉,但我沒有得到任何東西。 我不知道從哪里開始工會。 任何人都可以幫我解決代碼謝謝! PS我只允許使用數組和簡單的代碼算法。 提前致謝!

使用std :: set_unionstd :: set_intersection ,例如

int *c = std::set_union(setA, setA + a, setB, setB + b, setC)
int *c = std::set_intersection(setA, setA + a, setB, setB + b, setC)

其中setC是足夠大小的輸出數組; c指向構造范圍的最后一個元素之后的一個。

如果你想要基數, c - setC就是你的答案。

我建議使用像std::vector的表示法,並在算法調用中使用迭代器而不是數組/指針/長度。

輸入范圍假定為已排序; 輸出也是如此。

如果你想自己做,你會在上面的鏈接中找到“可能的實現”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM