この問題では std::vector のみを使用しており、各ベクトルは重複せずに並べられています。今、同じ番号を持つベクトルを結合したいと思います。したがって、2 3 は 3 4 5 と結合できますが、4 5 や 1 5 と結合することはできません。
例:
次のベクトルがある場合...
1
1
2 3 4
5
1 5
2
4 7
結合後、2 つのベクトルしか残らないはずです。
1 5
2 3 4 7
コード:
vector<int> a,b,c,d,e,f,g;
vector<vector<int>> myList;
a.push_back(1);
b.push_back(1);
c.push_back(2);
c.push_back(3);
c.push_back(4);
d.push_back(5);
e.push_back(1);
e.push_back(5);
f.push_back(2);
g.push_back(4);
g.push_back(7);
myList.push_back(a);
myList.push_back(b);
myList.push_back(c);
myList.push_back(d);
myList.push_back(e);
myList.push_back(f);
myList.push_back(g);
//this should print out the vectors in my above example
for (int i =0; i<myList.size(); i++) {
for (int j=0; j<myList[i].size(); j++) {
cout<<myList[i][j]<<" ";
}
cout<<endl;
}
目標を達成するために set_union と set_intersection を使用しようとしましたが、期待どおりに動作しません。問題は、適切に変更していないベクトルのサイズにあると思われます。助けてください。ありがとう!
編集:
これはバグのあるコードです。元々はユニオンに問題がありましたが、今は自動的に機能します.. set_intersection を使用して交差があるかどうかを確認する方法がほとんどわからないと思います
vector<int>::iterator myIt;
vector<int> myTemp;
vector<int> myTemp2;
vector<int> myResult(20);
vector<int> myResult2(20);
while (!myList.empty()) {
myTemp2 = myList.back();
myList.pop_back();
myIt = set_intersection(myTemp.begin(), myTemp.end(),
myTemp2.begin(), myTemp2.end(), myResult.begin());
//this is checking whether there is intersection but it doesn't work
if (myResult.size()) {
myIt = set_union(myTemp.begin(), myTemp.end(),
myTemp2.begin(), myTemp2.end(), myResult2.begin());
myTemp = myResult2;
}
}
cout<<"after union: "<<endl;
for (auto it = myResult2.begin(); it != myResult2.end() ; it++) {
cout<<*it<< " ";
}