为什么STL优先级队列错误地污染了我的类对象

问题描述 投票:0回答:1

我如图所示重载了<运算符,但每次运行程序时,我的类对象似乎都是随机排序的。

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);
}

这可能是由于我使用了指向节点的指针而不是节点本身吗?如果可以,我该如何解决?

c++ stl polymorphism priority-queue
1个回答
1
投票

priority_queue<Node*> my_q;将比较类型为Node*的元素进行排序,它将not为您取消引用那些指针并调用您的重载运算符。不相关指针的比较具有un定义的行为,但在您的情况下不会产生有用的结果。

修复此错误时,还会出现另一个错误:您从未初始化decimal_value,因此它的值是不确定的/随机的。

© www.soinside.com 2019 - 2024. All rights reserved.