C++ 为什么运营商<;在c+;中实现基于类的优先级队列时需要重载+;?

C++ 为什么运营商<;在c+;中实现基于类的优先级队列时需要重载+;?,c++,operator-overloading,priority-queue,C++,Operator Overloading,Priority Queue,注意,我不是在问答案。我只是好奇为什么事情会发生 我需要为类分配的打印机模拟器实现一个优先级队列。在查看了internet上的示例后,我注意到operator

注意,我不是在问答案。我只是好奇为什么事情会发生

我需要为类分配的打印机模拟器实现一个优先级队列。在查看了internet上的示例后,我注意到operator<被重载,以便正确排列优先级队列


为什么运算符<需要重载?其中,“STL容器默认情况下使用运算符<对内容进行排序,对于排序内容的容器

您可以通过向容器的构造函数传递一个比较函子来覆盖它,这允许您将排序/排序与容器对象解耦


可以选择运算符>,但必须选择一个运算符,这就是运算符好的,基本原因是优先级队列是一种结构,在这种结构中,插入的项目按照某种顺序函数的顺序返回。您需要一个排序,处理它的明显方法是重载运算符 为什么运算符<需要重载

Compare
函数对象位于:

Compare在其参数类型上诱导严格弱排序,如LessThan Compariable requirements中所定义

:

注释

只有操作符<是基本的;其他不等式运算符本质上是语法糖

反对称性是一个定理,而不是公理:它源于不可伸缩性和传递性

[3] 由于不可伸缩性和传递性,算子<总是满足偏序的定义。严格弱序的定义更为严格,而全序的定义更为严格


其中是“FYI:std::priority\u队列可以接受比较谓词。
运算符<用作默认行为。这是最低要求

为什么操作符>没有过载 反而

我认为是历史原因。在数学中,所有示例通常描述为<运算,一个运算符足以定义所有其他运算(>,=,=,!=)

此实现似乎不适用 对我来说完全是直觉

对我来说,这个界面是意料之中的。我认为这是一种习惯

执行运算符是否正确 重载更改队列STL的方式 工作

不,不。不是STL队列,只有您的队列-对于您的类型,如果您自己的比较器未定义。

优先级\u队列使用
std::less
,这反过来要求
T()
为有效表达式。可以是成员,也可以是非成员,但表达式必须有效

然而,
std::less
可能是专门化的,所以您关于操作符<需要重载的说法有点误导。

您学习了该操作符