优先级队列排序对象不正确(用户定义的比较)
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
对象 a0
、a1
、a2
和 a3
推入优先级队列时,到达时间为 [ =22=、0
、50
、30
,优先级队列好像是按照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()
弹出对象时,您会看到剩余的对象被重新排序。
我有一个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
对象 a0
、a1
、a2
和 a3
推入优先级队列时,到达时间为 [ =22=、0
、50
、30
,优先级队列好像是按照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()
弹出对象时,您会看到剩余的对象被重新排序。