在set容器中存储结构体

只需要重载一下"<"操作符即可,具体看一下代码

#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

转载于:https://www.cnblogs.com/sinpoo/p/3385579.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值