我有兩種類型的數據集。兩者大小相同。一個包含vector<int>
,另一個包含vector<vector<double> >
。 當我向前移動一個元素時,可以看到我的vector<int>
中的一些重複項。所以,我想從vector<int>
中刪除重複的元素(第二個元素)並繼續保留第一個元素。如果我擦除重複的元素,那麼同時我想合併來自我的vector<vector<double> >
數據集的相應兩個向量的vector<double>
。一旦我合併,我想刪除第二個vector<double>
,因爲它已被添加到以前的vector<double>
。通過這樣做,我希望進一步保留相同大小的數據集,而不會在第一個數據集中出現重複,也不會丟失第二個數據集中的任何元素。使用兩個向量 - 刪除重複項和合並
我已經實現了一個簡單的代碼,但我認爲它的邏輯錯誤。所以,你能幫我糾正這個代碼嗎?
vector<int>
數據集被指定爲my_list vector<vector<double> >
數據集被指定爲MYDATA
例如,這裏是我的兩個向量
my_list = {222, 208, 201, 201, 201, 206, 211, 222}
mydata = {{a1,a2,a3},{b1,b2},{c1},{d1},{e1,e2},{f1,f2},{g1},{h1,h2,h3}}
after, removing duplicate from the 1st vector and by merging corresponding vectors from
2nd data, the final output would be like as
my_list = {222, 208, 201, 206, 211, 222}
mydata = {{a1,a2,a3},{b1,b2},{c1, d1, e1,e2},{f1,f2},{g1},{h1,h2,h3}}
vector<int>::iterator no, no2;
vector<vector<double> >::iterator itr1, itr2;
int i;
for (no=my_list.begin(), no2=my_list.begin()+1,
itr1=mydata.begin(), itr2=mydata.begin()+1, i=0; no != my_list.end()-1; ){
if (*no == *no2){ //current = next
no2 = my_list.erase(no2);
//add itr2 data to itr1 vector and erase itr2
mydata[i].insert(mydata[i].end(), (*itr2).begin(), (*itr2).end());
itr2 = mydata.erase(itr2);
}
else{
++no; ++no2;
++itr1; ++itr2;
++i;
}
}
不明白按問的問題。 – thb 2012-03-22 14:53:29
@thb:對原始帖子做了一些更改。 – gnp 2012-03-22 15:06:38
你編譯過嗎? 'push_back'是無效的,你不能將一個矢量推送到另一個矢量。你需要使用'vector :: insert'。 – 2012-03-22 15:52:55