我正在尝试学习C ++ STL ..我遇到了这种语法,无法弄清楚整行的含义!
struct student{
int id,pts;
bool operator < (student x) const{
return pts>x.pts;
}
}a[150000];
答案 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 <
是要定义的名称,就像foo
或bar
一样。它的行为就像一个标识符。
bool operator < (student x) const
声明函数为bool foo (student x) const
。
效果是定义<
对象之间student
运算符的用法。与STL的连接是与对象排序相关的模板使用a < b
之类的表达式来执行排序。这出现在像std::sort
这样的算法和像std::map
这样的容器中。
这个特定的定义按分数对学生进行分类,这对于排序学生来说并不是一个非常好的系统。 sort
和map
等设施始终提供operator <
的替代方案,您可以在其中传递更具体的功能,例如less_points
。此外,由于operator <
的定义在内部使用>
运算符(不反转左侧和右侧),因此它将按降序排序,而通常的惯例是使用升序。 / p>
注意,定义operator <
或operator ==
而不定义>
,!=
或其他关系运算符是很常见的。标准库只关注<
和==
,并且通常会浪费样板来获取其余部分。同样,避免在可能不是数字的对象上使用<
和==
之外的关系是一个很好的约定。