두 가지 유형의 데이터 집합이 있습니다. 둘 다 같은 크기입니다. 하나는 vector<int>
이고 다른 하나는 vector<vector<double> >
입니다. 한 요소를 다른 요소로 이동하면 vector<int>
에서 중복 된 부분을 볼 수 있습니다. 따라서 vector<int>
에서 중복 요소 (두 번째 요소)를 삭제하고 첫 번째 요소를 추가로 유지하려고합니다. 중복 요소를 지우면 동시에 vector<vector<double> >
데이터 세트의 해당 두 벡터 중 vector<double>
을 병합하고 싶습니다. 내가 합병되면, 이전에 vector<double>
에 추가 된대로 2nd 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
@thb : 원래 게시물을 약간 변경했습니다. – gnp
컴파일 했습니까? 'push_back'은 유효하지 않습니다. 벡터를 다른 벡터로 푸시 할 수 없습니다. 'vector :: insert'를 사용해야합니다. –