"operator <" 语法是什么意思?

What does the "operator <" syntax mean?

我正在尝试学习 C++ STL..我遇到了这个语法,无法弄清楚整行的意思!

  struct student{ 
   int id,pts;

bool operator < (student x) const{
    return pts>x.pts;
}
}a[150000];

它正在为结构 student 定义一个 "less than" 运算符,这样人们就可以写:

 student one, two;
 bool b = one < two;

operator< 允许比较两个学生,在这个例子中,它只比较 pts。

struct student{ 
   int id,pts;

   bool operator < (student x) const{
    return pts>x.pts; // must be pts<x.pts
  }
}a[150000];

以免它以其他方式工作(运算符 >),实现必须使用运算符 '<'

作为一种好的做法,请考虑为 operator > 和 operator= 添加自定义定义,因为比较仅基于 pts(根据 operator < 的定义)

为了保证使用比较运算符时的完整性和逻辑正确性,请考虑为运算符 > 和 == 添加自定义定义

struct student{ 
   int id,pts;

   bool operator < (student x) const{
      return pts<x.pts; 
   }   
   bool operator > (student x) const{
      return pts>x.pts; 
   }
   bool operator == (student x) const{
      return pts == x.pts; 
   }

}a[150000];

operator <是一个要定义的名字,就像foobar一样。它的行为就像一个标识符。

bool operator < (student x) constbool foo (student x) const 那样声明一个函数。

作用是定义 student 对象之间 < 运算符的用法。与 STL 的联系是与对象排序相关的模板使用 a < b 等表达式来执行排序。这出现在 std::sort 等算法和 std::map.

等容器中

该特定定义按分数对学生进行排序,这不是一个很好的学生排序系统。 sortmap 等设施始终提供 operator < 的替代方法,您可以在其中传递更具体的函数,比如一个名为 less_points 的函数。此外,由于 operator < 的定义在内部使用了 > 运算符(不颠倒左右两侧),因此它将按降序排序,而通常的约定是使用升序。

请注意,定义 operator <operator == 而不定义 >!= 或其他关系运算符是很常见的。标准库只关心 <==,获取其余部分的样板通常被浪费了。同样,避免在可能不是数字的对象上使用 <== 之外的关系是一个很好的约定。