【发布时间】:2019-10-25 08:52:40
【问题描述】:
我重载了< 运算符,如图所示,但每次运行程序时,我的类对象似乎都是随机排序的。
class Node
{
int decimal_value
public:
Node(int decimal) : decimal_value(decimal)
{}
friend bool operator<(const Node& p1, const Node& p2);
};
bool operator<(const Node& p1, const Node& p2)
{
return p1.decimal_value < p2.decimal_value;
}
int main()
{
Node* n1= new Node(5);
Node* n2 = new Node(4);
priority_queue<Node*> my_q;
my_q.push(n1);
my_q.push(n2);
}
这可能是因为我使用了指向节点的指针而不是节点本身吗?如果是这样,我该如何解决?
【问题讨论】:
-
在创建minimal reproducible example 向我们展示时,请确保它复制了您遇到的问题,并且不包含任何其他不相关的错误。
-
您的运算符重载与指针的优先级队列无关。他们正在使用股票指针价值比较的面值进行比较。将自定义比较器类型作为队列的附加参数。
-
是的,问题很可能是因为您有一个指针队列,因此将调用的比较运算符是
bool operator<(Node*, Node*)。 -
查看link
-
priority_queue<Node>有什么问题?如果你真的必须存储指针,你应该存储智能指针(除非其他人负责释放它们)
标签: c++ stl polymorphism priority-queue