只需要重载一下"<"操作符即可,具体看一下代码
#include <iostream> #include <set> using namespace std; struct dPoint { double x; double y; //重载"<"关系运算符,犹豫set容器只用到小于比较,其他几个可以不管 bool operator<(const dPoint& point) const { if(x != point.x) return (x < point.x); else return (y < point.y); } //为了方便读取,可以重载一下赋值运算符 dPoint& operator=(const dPoint& point) { this->x = point.x; this->y = point.y; return *this; } }; void main() { set<dPoint> PointSet; for(int i = 0; i < 10; i++) { dPoint point; point.x = i; point.y = i; PointSet.insert(point); } dPoint point; point.x = 4; point.y = 4; //以下是两种删除set中元素的方法 //1.使用迭代器查找后删除 set<dPoint>::iterator iter = PointSet.find(point); if(iter != PointSet.end()) PointSet.erase(iter); point.x = 5; point.y = 5; //2.直接用key值删除 PointSet.erase(point); //输出结果 for(iter = PointSet.begin(); iter != PointSet.end(); iter++) { point = *iter; cout<<point.x<<"\t"<<point.y<<endl; } getchar(); }
结果:有两个点被删除,4和5