我如图所示重载了<
运算符,但每次运行程序时,我的类对象似乎都是随机排序的。
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);
}
这可能是由于我使用了指向节点的指针而不是节点本身吗?如果可以,我该如何解决?
priority_queue<Node*> my_q;
将比较类型为Node*
的元素进行排序,它将not为您取消引用那些指针并调用您的重载运算符。不相关指针的比较具有un定义的行为,但在您的情况下不会产生有用的结果。
修复此错误时,还会出现另一个错误:您从未初始化decimal_value
,因此它的值是不确定的/随机的。