什么是“运营商<”语法意思?

时间:2015-08-14 00:58:26

标签: c++11 syntax stl

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

  struct student{ 
   int id,pts;

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

3 个答案:

答案 0 :(得分:3)

它正在定义一个&#34;小于&#34;结构student的运算符,以便人们可以写:

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

答案 1 :(得分:1)

运营商LT;允许比较两个学生,在这个例子中,它只比较pts。

struct student{ 
   int id,pts;

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

以免它以其他方式工作(运算符&gt;),实现必须使用运算符&#39;&lt;&#39;

作为一种良好做法,请考虑为运营商添加自定义定义&gt;和operator =,因为比较仅基于pts(通过运算符&lt;的定义)

为了在使用比较运算符时最小的完整性和逻辑正确性,请考虑为运算符添加自定义定义&gt;和==

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; 
   }

}一个[150000];

答案 2 :(得分:1)

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

bool operator < (student x) const声明函数为bool foo (student x) const

效果是定义<对象之间student运算符的用法。与STL的连接是与对象排序相关的模板使用a < b之类的表达式来执行排序。这出现在像std::sort这样的算法和像std::map这样的容器中。

这个特定的定义按分数对学生进行分类,这对于排序学生来说并不是一个非常好的系统。 sortmap等设施始终提供operator <的替代方案,您可以在其中传递更具体的功能,例如less_points。此外,由于operator <的定义在内部使用>运算符(不反转左侧和右侧),因此它将按降序排序,而通常的惯例是使用升序。 / p>

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