std::map 自定义类做为key时 find operator 小于 的正确写法

本文介绍了在使用自定义类作为std::map的key时,如何正确实现operator<以满足排序需求。关键在于operator<的实现需遵循逻辑或运算,确保排序的正确性。
摘要由CSDN通过智能技术生成

如果没记错很久以前就遇到过这个问题了,当时也纠结了一会,没想到今天又遇到了。聊记于此。

类定义:

 

class DataSortKey
{
public:
	DataSortKey(){ memset(this, 0, sizeof(*this)); }
	unsigned level;
	unsigned vip_level;
	unsigned param1;
	uint64_t param2;
	unsigned param3;
};

bool operator<(const DataSortKey& lhs, const DataSortKey& rhs);

 

operator<的正确实现方式:

 

bool operator<(const DataSortKey& lhs, const DataSortKey& rhs)
{
    // 20190921修正
	return (lhs.level < rhs.level) || 
(lhs.level == rhs.level && lhs.vip_level < rhs.vip_level) ||
(lhs.level == rhs.level && lhs.vip_level == rhs.vip_level && lhs.param1 < rhs.param1) || 
(lhs.level == rhs.level && lhs.vip_level == rhs.vip_level && lhs.param1 == rhs.param1 && lhs.param2 < rhs.pa
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值