从非主要类型的向量中删除重复的Elemnts

removing duplicate elemnts from a vector of non-primitive type

本文关键字:Elemnts 删除 向量 非主要 类型      更新时间:2023-10-16

我读取了大量的点坐标x,y和z,然后将它们存储在点结构的向量中以进行进一步处理。

struct Point{
    double x,y,z;
    Point (double x0, double y0, double z0): x(x0), y(y0), z(z0) {}
}

vector<Point> pv;
pv.push_back (Point(x,y,z));

i还具有哈希函数,可以将所有点的坐标及其向量索引映射到其他处理的unordered_multimap。

问题是我从文件中读到了许多重复点,我必须摆脱这些元素。我已经看到有关如何从原始类型的向量中删除重复元素的解决方案,但这不适用于我的情况。另外,许多提出的方法需要对不适用于点结构的排序。

定义较少的操作员,然后应用与原始类型相同的方法

如何定义操作员是:

struct Point{
    (...)
    const bool operator < ( const Point &r ) const{
        return (x<r.x) || (x==r.x && y<r.y) || (x==r.x && y==r.y && z<r.z);
    }
};

您可以使用所谓的擦除式示例"成语":

#include <algorithm>
...
pv.erase(std::remove(pv.begin(), pv.end(), pointToRemove), pv.end());

其中为Point定义了operator==

bool operator==(Point a, Point b) {
    return a.x == b.x && a.y == b.y && a.z == b.z;
}