优先级队列排序对象不正确(用户定义的比较)

Priority Queue Sorting Objects Incorrectly (User-Defined Compare)

我有一个class Customer,它有一个成员变量arrivalTime。我定义了一个 getter 函数 getArrivalTime()。我将 Customer 存储在优先级队列中,并定义了一个自定义谓词如下:

class ArrivalQueueCompare
{
public:
    bool operator()(const Customer &a, const Customer &b)
    {
        return a.getArrivalTime() > b.getArrivalTime();
    }
};

优先队列声明为:

std::priority_queue<Customer, std::vector<Customer>, ArrivalQueueCompare> arrivalQueue;

当我将四个 Customer 对象 a0a1a2a3 推入优先级队列时,到达时间为 [ =22=、05030,优先级队列好像是按照a1-a0-[=的顺序存储的20=]-a3.

根据我的预测,顺序应该是 a1-a0-a3-a2,但优先级队列以其他方式存储它们。为什么会这样?

我附上了 Xcode 的调试器屏幕截图作为证明:Screenshot 1 Screenshot 2 Screenshot 3 Screenshot 4

更新:

我正在读取文件中的行并创建 Customer 个对象:

 while (std::getline(file, line))
    {
        Customer newCustomer = createCustomerObject(line);

        arrivalQueue.push(newCustomer);
    }

createCustomerObject() 函数只是通过使用 line.[=40 初始化 Customer 的成员变量来创建 returns 一个 Customer 对象=]

A priority_queue 不以排序的方式存储对象。它只保证第一个元素是最大的(取决于你的比较)。

因此,观察存储向量中以 non-ordered 方式存储的对象是预期的。

当您开始使用 pop() 弹出对象时,您会看到剩余的对象被重新排序。