iT邦幫忙

0

如何求兩個集合的差集、刪除兩向量中相同元素?

  • 分享至 

  • xImage
#include <iostream>        
#include <vector>    
#include <algorithm>       
using namespace std;
int main(void)
	{   
	    int n1,n2,x,y;
	    vector<int>a,b,d,e;
	    struct data
       {
	   vector<int>a;
	   vector<int>b;
	   }; 
	cin>>n1;
    for(int i=0;i<n1;i++)
    {   
	    cin>>x; 
		a.push_back(x);
	}
		sort(a.begin(),a.end());   
	cin>>n2;
    for(int i=0;i<n2;i++)
    {   
        cin>>y;
		b.push_back(y);
	}
		sort(b.begin(),b.end());
        for(int i=0;i<a.size();i++)	    
	{
		for(int j=0;j<b.size();j++)
		{ 
		  e.push_back(a[i]);
		  if(a[i]==b[j])
		  a.erase(a.begin()+i);
		  
		}	
    }
    sort(e.begin(),e.end());
    cout<<"{";
    for(int i=0;i<e.size();i++)
        { 
			cout << e[i] << ",";
		} 
		cout<<"\b}";
		cout <<"\n";
    return 0;  
}  
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-08-04 11:49:38
最佳解答

可參考這篇

另外
如果這題解決了的話
請選個最佳解答以結案

1
淺水員
iT邦大師 6 級 ‧ 2021-08-04 00:10:27

集合就用 std::set 來處理比較方便

#include <iostream>
#include <set>
using namespace std;
void inputSet(set<int> &s)
{
    int n, x;
    cin >> n;
    for (int i = 0; i < n; ++i)
    {
        cin >> x;
        s.insert(x);
    }
}
int main(void)
{
    set<int> a, b, c;
    inputSet(a);
    inputSet(b);
    for (set<int>::iterator it = a.begin(); it != a.end(); ++it)
    {
        if (b.count(*it) == 0)
        {
            c.insert(*it);
        }
    }
    cout << '{';
    for (set<int>::iterator it = c.begin(); it != c.end(); ++it)
    {
        cout << *it << ',';
    }
    cout << "\b}\n";
    return 0;
}

參考資料:C++ std::set 用法與範例

我要發表回答

立即登入回答