set内嵌结构体 的插入和删除

1,在set中嵌入结构体或自定义函数的时候需要使用 < 重载运算符。(map也一样)

注意:
重载的方式不同,所造成的影响,或者说set的功能就不同。
举个例子:
A

struct AC
{
	int a,b;
	bool friend operator <(AC m1,AC m2)
	{
		if(m1.a!=m2.a)
		return m1.a<m2.a;
		else 
		{
			return m1.b<m2.b;
		}
	}
};
set<AC >s;

B

struct AC
{
	int a,b;
	bool friend operator <(AC m1,AC m2)
	{
		return m1.a<m2.a;
	}
};
set<AC >s;

A和B都是用来模拟set内嵌pair。
即:set<pair<int,int> >s;
但A和B在查找上有很大的不同点:
对于A来说 (1,2)和(1,3)和(3,4)是三个不同的pair,如果在A中对(1,2)进行erase操作,可以写成s.erase((AC){1,2})
对于B来说(1,2)和(1,3)和(3,4)是两个不同的pair,如果在A中对(1, 2)进行erase操作,可以写成s.erase((AC){1,x})。期中x为任意数字
为什么会这样呢?其原因就是两者之间的 < 重载不同。
对于A来说,辨别不同的AC类型的结构体要关注a和b,但对于B来说,辨别只需要关注 a 。换而言之,就是在B中,只要a一样,两个结构体就一样。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值