【发布时间】:2017-11-03 02:16:36
【问题描述】:
例如,我有两个std::vector<int> a 和std::vector<double> b 形式的向量
a= 1,2,3,3,4,5,6;
b=0.1, 0.3, 0.2, 0.5, 0.6, 0.1, -0.2;
两个向量的大小相同,实际上它们就像一对 XY 对 ((1,0.1) , (2,0.3)...etc)。幸运的是,a 总是从少到多排序
我想在第一个向量中找到重复项,然后删除它们中的第一个,在我的示例中,输出应该是:
a= 1,2,3,4,5,6;
b=0.1, 0.3, 0.5, 0.6, 0.1, -0.2;
在 MATLAB 中我会这样做:
b(find(diff(a) == 0)) = [];
a(find(diff(a) == 0)) = [];
我知道我可以使用 for 循环和 if 语句以老式方式完成此操作,但我确信在 c++ 中使用容器和迭代器可以使用更优雅的方式来完成此操作。在互联网上搜索有很多例子可以擦除第一个向量中的重复项,但没有使用相同的索引来擦除第二个向量中的元素。
感谢任何帮助。
【问题讨论】:
-
为什么不使用一个向量来将两条数据存储在一个元素中,而不是使用并行向量呢?然后做你想做的就变得微不足道了。
-
或者最初将您的数据填充到
std::map<key, value>,您将不再需要删除重复项,因为地图不支持重复键 -
您真的将
0.3存储在您的int向量中吗? -
我的错,向量 b 是 double 而不是 int,它们来自另一个我无法修改的函数。
标签: c++ c++11 unique stdvector