C++ 使用两个向量-删除重复项并合并

C++ 使用两个向量-删除重复项并合并,c++,iterator,C++,Iterator,我有两种类型的数据集。两个尺寸都一样。一个包含向量,另一个包含向量。 当我将一个元素向前移动另一个元素时,我可以看到向量中的一些重复项。所以,我想从向量中删除重复的第二个元素,并进一步保留第一个元素。如果我删除一个重复的元素,那么,同时,我想合并向量数据集中对应的两个向量的向量。合并后,我想删除第二个向量,因为它已经添加到上一个向量中。通过这样做,我希望进一步维护相同大小的数据集,而不会在第一个数据集中出现重复项,也不会从第二个数据集中丢失任何元素 我已经为此实现了一个简单的代码,但我认为它的逻

我有两种类型的数据集。两个尺寸都一样。一个包含向量,另一个包含向量。 当我将一个元素向前移动另一个元素时,我可以看到向量中的一些重复项。所以,我想从向量中删除重复的第二个元素,并进一步保留第一个元素。如果我删除一个重复的元素,那么,同时,我想合并向量数据集中对应的两个向量的向量。合并后,我想删除第二个向量,因为它已经添加到上一个向量中。通过这样做,我希望进一步维护相同大小的数据集,而不会在第一个数据集中出现重复项,也不会从第二个数据集中丢失任何元素

我已经为此实现了一个简单的代码,但我认为它的逻辑是错误的。那么,你能帮我纠正一下这个代码吗

矢量数据集被指定为我的_列表 矢量数据集被指定为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;
       }
}

我最好不要修改原始向量,如果没有任何内存问题,则更简单:

vector<int> res_my_list;
vector<vector<double> > res_mydata;

vector<int>::iterator curlist = my_list.begin(), endlist = my_list.end();
vector<vector<double> >::iterator curdata = mydata.begin(), enddata = mydata.end();

res_my_list.push_back(*curlist++);
res_mydata.push_back(*curdata++);

while(curlist != endlist)
{
    if(res_my_list.back() == *curlist)
        res_mydata.back().insert(res_mydata.back().end(), (*curdata).begin(), (*curdata).end());
    else
    {
        res_my_list.push_back(*curlist);
        res_mydata.push_back(*curdata);
    }
    ++curlist;
    ++curdata;
}

不理解所问的问题。@thb:对原始帖子做了一些更改。您编译了吗?推回无效,不能将一个向量推回到另一个向量。你需要使用vector::insert。我觉得这个逻辑很好,只需要几个编译器errors@Mooing鸭子:我已经修改了我的代码并插入了。它适用于我的一个例子。为了学习,请您告诉我,为什么短阵列无法实现此功能。我不明白这一点。另外,为了学习,我想知道其他可能的好方法。请修改一下。