C++ STL 重载运算符小于号的巧妙

原创 2007年12月21日 23:00:00
一天,无意中看到如下类定义:

            class Foo

            {

                    int a1;

                    int a2;

                   //方案一

                     bool operator<(const Foo& other)  const //类字典序比较方式

                    {

                            return ((a1<other.a1) || (!(other.a1<a1) && (a2<other.a2));

                    }

            }

        怪在哪呢?就怪在粗体字的部分的,看上去挺别扭的写法,不就是

            //方案二

            bool operator<(const Foo& other)  const

            {

                if(a1<other.a1 || (a1==other.a1 && a2<other.a2))

                    return true;

                return false;

            }

        这样不是更清晰?!难道是妙在少了一行代码???

       其实谜底在于,方案一只用了一个小于号,而方案二却用了小于号与等于号,多了一个等于号;更正式来说

是要多重载一个==号,例子中的a1,a2是基本类型,其==操作已默认实现,但当a1或a2为类时,就得自己重

载a1或a2的“==”运算符了。

        换言之,在a1或a2为对象时,

                方案一:只须重载小于运算符

                方案二:必须重载小于运算符以及“==”运算符

 

操作符(++,+,+=,小于号,(),--等)重载

 1. 操作符(++,+,+=,小于号等)重载 新建QT项目,编写头文件 #ifndef DIALOG_H #define DIALOG_H #include #inclu...
  • toto1297488504
  • toto1297488504
  • 2014年08月21日 21:19
  • 3721

c++ 类重载小于号

操作符的重载有两种:全局函数,类的函数。 全局:    bool operator  类函数:    bool operator...
  • ytlcainiao
  • ytlcainiao
  • 2015年05月25日 19:54
  • 792

STL map 排序(重载小于号和仿函数)

STL中默认是采用小于号来排序的,以上代码在排序上是不存在任何问题的,因为上面的关键字是int型,它本身支持小于号运算,在一些特殊情况,比如关键字是一个结构体,涉及到排序就会出现问题,因为它没有小于号...
  • wzhwho
  • wzhwho
  • 2011年03月02日 10:18
  • 6083

C++读书笔记之 关系运算符重载 大于号> 小于号< 等于号== 重载 overload

public:         static const double absError=0.0000001;         static  bool IsEqual(double a, dou...
  • shihui512
  • shihui512
  • 2013年05月16日 16:10
  • 9180

结构体用于map,set时要重载运算符<

#include #include using namespace std; struct P { int entry; int time; bool operatore...
  • calvin_zcx
  • calvin_zcx
  • 2010年12月12日 23:41
  • 8630

struct重载小于号

struct能重载? 没错,虽然在C里struct里不能定义函数,但在C++中struct除了默认成员为public外,和class几乎没有分别。 那如果要用到重载的,为什么不用class? 不...
  • handongyexue
  • handongyexue
  • 2012年12月27日 22:12
  • 483

map key是结构体的find问题:小于号重载须注意的问题 strict weak ordering

这是今天写程序中遇到的两个诡异的问题。我的 IDE 是 VC++2005 ExpressiEdition 。 第一个问题是关于 map 的。话不多说,以下 20 多行的 C++ 代码重现了我遇到的问题...
  • zyyoung
  • zyyoung
  • 2010年12月08日 10:35
  • 4208

C++的运算符重载

  C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特...
  • zgl_dm
  • zgl_dm
  • 2007年08月31日 15:44
  • 114026

C++ operator关键字(重载操作符)

重载运算符 operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。...
  • My_heart_
  • My_heart_
  • 2016年05月29日 22:55
  • 4960

C++关系运算符重载

C++ 语言支持各种关系运算符( 、 = 、 == 等等),它们可用于比较 C++ 内置的数据类型。 您可以重载任何一个关系运算符,重载后的关系运算符可用于比较类的对象。 下面的实例演示了如何重载 ...
  • qq_28796345
  • qq_28796345
  • 2016年04月29日 18:16
  • 961
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ STL 重载运算符小于号的巧妙
举报原因:
原因补充:

(最多只允许输入30个字)