使用两个矢量-删除重复项并合并
working with two vectors - remove duplicates and merging
我有两种类型的数据集。两者尺寸相同。一个包含vector<int>
,另一个则包含vector<vector<double> >
。当我将一个元素移到另一个元素时,我可以从vector<int>
中看到一些重复。因此,我想从vector<int>
中删除重复的元素(第二个元素),并进一步保留第一个元素。如果我擦除了一个重复的元素,那么同时,我想从我的vector<vector<double> >
数据集中合并相应两个向量的vector<double>
。合并后,我想删除第二个vector<double>
,因为它已经添加到以前的vector<double>
中。通过这样做,我希望进一步保持相同大小的数据集,而不会在第一个数据集中出现重复,也不会丢失第二个数据集中的任何元素。
我已经实现了一个简单的代码,但我认为它的逻辑是错误的。那么,你能帮我纠正这个代码吗?
vector<int>
数据集分配为my_listvector<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;
}
}
我最好不要修改原始向量,如果你没有任何内存问题,它更简单:
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;
}
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 使用C++程序合并排序没有得到正确的输出
- 将指针设置为"nullptr"并不能防止双重删除?
- 合并,分类和删除重复分类的向量和未分类的向量
- 删除/最小化GIT合并冲突
- 使用两个矢量-删除重复项并合并
- 用C语言进行合并排序和删除重复项(任何语言都可以)
- 将原始操作符new、放置new和标准删除合并是否合法