我只在这个问题中使用 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<< " ";
}