非基本类型的比较运算的操作

作者寄语:学习中总结的一些问题,难免有纰漏,欢迎探讨!
一.问题描述
在实际编码中我们经常会碰到“ 比较两个结构体是否相同 ”“ 比较两个类对象是否相同 ”等类型的比较,总的来说就是比较 非基本类型 的数据。这种比较在在c++语言中并 没有内建也没法内建, 所以需要我们 重载比较操作符 自定义比较规则, 那么我们怎么自定义比较规则呢
二.解决思路
默认情况下,C++仅支持基础数据类型,如int, float等类型的直接比较,结构体对象无法直接比较。
不过C++的结构体可以说是类(class)的另一种形式。所以在定义了比较运算符对应的重载函数后,可以直接比较。比较的结果为对应运算符重载的返回值。
实现上述比较基本上有两个步奏:
第一 :重载比较操作符(关系运算符);
第二: 自定义比较规则;

1.重载比较操作符(关系运算符)
如结构体类型为test,那么要实现==的直接比较,有两种方法:
(1)在struct test中增加成员函数
bool operator == (const test & value) const;
(2)在全局函数中,增加
boot operator == (const test &v1, const test &v2);
2.自定义比较规则
自定义比较规则就是指比较规则自己定,那么就要考虑怎么定义大小,如下例子:
typedef struct Test
{
int a;
int b;
bool k;
}
Test test1,test2;
如果要比较上述的结构体,如要比较test1,test2的大小,我们要定义如何比较的规则:
(1) test1和test2的关系(<,>,=)只与test1.a和test2.a的大小关系相关,比如:
只要test1.a<或>或=test2.a,就判定test1<或>或=test2;( 部分比较 );
(2) test1和test2的关系(<,>,=)与test1.a和test2.a的大小关系以及test1.b和test2.b相关,比如:
1)当test1.a!=test2.a时,只比较test1.a和test2.a来判定test1和test2的关系;
2)当test1.a==test2.a时,比较test1.b和test2.b来判定test1和test2的关系;
if ( test1.a == test2.a)
{
return test1.b< test2.b
}
return test1.a < test2.a;
(3) test1和test2的关系(<,>,=)与test1.a和test2.a的大小关系以及test1.b和test2.b以及test1.k和test2.k相关,与第二种情况相同;

例:
struct STest
{
EA eA;
EB eB;
INT64 nTest1;
INT64 nTest2;
bool operator < (const STest& sTest) const
{
if (eA == sTest.eA)
{
if (eB == sTest.eB)
{
if (nTest1 == sTest.nTest1)
{
return nTest2 < sTest.nTest2;
}
return nTest1 < sTest.nTest1;
}
return eB < sTest.eB;
}
return eA < sTest.eA;
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值