"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 <
是一个要定义的名字,就像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 <
的定义在内部使用了 >
运算符(不颠倒左右两侧),因此它将按降序排序,而通常的约定是使用升序。
请注意,定义 operator <
或 operator ==
而不定义 >
、!=
或其他关系运算符是很常见的。标准库只关心 <
和 ==
,获取其余部分的样板通常被浪费了。同样,避免在可能不是数字的对象上使用 <
和 ==
之外的关系是一个很好的约定。
我正在尝试学习 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 <
是一个要定义的名字,就像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 <
的定义在内部使用了 >
运算符(不颠倒左右两侧),因此它将按降序排序,而通常的约定是使用升序。
请注意,定义 operator <
或 operator ==
而不定义 >
、!=
或其他关系运算符是很常见的。标准库只关心 <
和 ==
,获取其余部分的样板通常被浪费了。同样,避免在可能不是数字的对象上使用 <
和 ==
之外的关系是一个很好的约定。