【发布时间】:2018-10-10 10:04:51
【问题描述】:
我有一个整数类型的二维向量,其中包含大量向量(即18000 及以上),并且该池中有大量重复向量。我想要做的是检测相似的向量并删除其中一个。
我目前正在做的是使用以下函数将每个向量与整个池进行比较:`
bool compareVectors(vector<int> a, vector<int> b)
{
if (a.size() != b.size())
{
return false;
}
sort(a.begin(), a.end());
sort(b.begin(), b.end());
return (a == b);
}
但这并不能有效地完成这个过程,大概是由于我正在进行大量比较。有没有可能有效的方法来做到这一点?
【问题讨论】:
-
当大小不同时,你会做一个无用的复制。
-
你不能先对每个向量排序一次吗?然后对向量的向量进行排序并在其上运行
std::unique。 -
您可以在主体中进行尺寸检查。如果它们相等,您确实需要复制到该函数。
-
你真的不关心元素的顺序来确定两个向量“相等”吗?
-
另外,如果性能是问题,按值传递向量可能是不可取的。通过引用传递它们并制作本地排序副本会更有效,因为如果大小不同,您首先会避免所有复制。
标签: c++ vector comparison large-data