从非主要类型的向量中删除重复的Elemnts
removing duplicate elemnts from a vector of non-primitive type
我读取了大量的点坐标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;
}
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- C++中的线程安全删除
- 如何从存储在std::映射中的std::集中删除元素
- 从非主要类型的向量中删除重复的Elemnts