c++20读笔-三向比较运算符

文章介绍了C++中的三向比较运算符,用于比较整型、浮点型和自定义类型的操作数。对于整型,结果是强排序;浮点型则是偏序;自定义类型则涉及弱排序。这种运算符返回的不是简单的布尔值,而是一种类似于枚举的类型,提供了更多的比较信息。对于原始类型,使用此运算符的好处不明显,但在比较复杂对象时非常有用。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

三向比较运算符可用于确定两个值的大小顺序。它也被称为太空飞船运算符。
使用单个表达式,它可以告诉你一个值是否等于、小于或大于另一个值。因为它必须返回的不仅是true或者false,所以它不能范围布尔类型。相反,他返回类枚举(enumeration-like)类型(不是真正的枚举类型,不能应用于switch),定义在和std名称空间中。


一、整形操作数

如果操作数是整形,结果是所谓的强排序,并可以是一下之一。
strong_ordering::less 第一个操作数小于第二个操作数
strong_ordering::greater 第一个操作数大于第二个操作数
strong_ordering::equal 第一个操作数等于第二个操作数

int i{11};
strong_ordering result{i <=> 0};
if(result == strong_ordering::less){ cout<< "less" << endl; }
if(result == strong_ordering::greater){ cout<< "greater" << endl; }
if(result == strong_ordering::equal){ cout<< "equal" << endl; }

二、浮点型操作数

如果操作数是浮点型,结果是一个偏序。
partial_ordering::less 第一个操作数小于第二个操作数
partial_ordering::greater 第一个操作数大于第二个操作数
partial_ordering::equivalent第一个操作数等于第二个操作数
partial_ordering::unordered 两个操作数中有非数字

int i{5.5};
partial_ordering result{i <=> 1.1};
if(result == partial_ordering::less){ cout<< "less" << endl; }
if(result == partial_ordering::greater){ cout<< "greater" << endl; }
if(result == partial_ordering::equivalent){ cout<< "equivalent" << endl; }

三、自定义类型

还有一种弱排序,针对自己定义的类型
weak_ordering::less 第一个操作数小于第二个操作数
weak_ordering::greater 第一个操作数大于第二个操作数
weak_ordering::equivalent第一个操作数等于第二个操作数

class ClassA
{
public:
	ClassA() {
		data = 0;
	};
	weak_ordering operator<=>(const ClassA& classA) {
		if (this->data < classA.data) {
			return weak_ordering::less;
		}
		if (this->data > classA.data) {
			return weak_ordering::greater;
		}
		if (this->data = classA.data) {
			return weak_ordering::equivalent;
		}
	}
public:
	int data;
};
int main()
{
	ClassA a;
	a.data = 3;
	ClassA b;
	b.data = 2;
	auto result = a <=> b;
	if (result == weak_ordering::less) { cout << "less" << endl; }
	if (result == weak_ordering::greater) { cout << "greater" << endl; }
	if (result == weak_ordering::equivalent) { cout << "equal" << endl; }
}

总结

对于原始类型,与仅使用==、<和>运算符进行单个比较相比,使用三向比较运算符不会带来太多收益。但是,它对于比较昂贵的对象很有用。
提供命名的比较函数来解释排序结果,这些函数是std::is_eq()、is_neq()、is_lt()、is_gt()以及is_gteq()。函数返回类型为布尔。

int i {11};
strong_ordering result { i <=> 0};
if(is_lt(result)){ cout << "less" << endl; }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值