[英]Priority Queue Sorting Objects Incorrectly (User-Defined Compare)
我有一個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
推入優先級隊列時,到達時間分別為20
、 0
、 50
和30
,優先級隊列似乎按照a1
- a0
- a2
的順序存儲了它們a3
。
根據我的謂詞,順序應該是a1
- a0
- a3
- a2
,但優先級隊列以其他方式存儲它們。 為什么會這樣?
我附上了 Xcode 調試器屏幕的截圖作為證明:截圖 1截圖 2截圖 3截圖 4
更新:
我正在從文件中讀取行並使用以下命令創建Customer
對象:
while (std::getline(file, line))
{
Customer newCustomer = createCustomerObject(line);
arrivalQueue.push(newCustomer);
}
所述createCustomerObject()
函數只是創建,並返回,一Customer
通過初始化的成員變量對象Customer
使用line
。
priority_queue
不會以排序的方式存儲對象。 它只保證第一個元素是最大的(取決於您的比較)。
因此,觀察存儲向量中以無序方式存儲的對象是可以預期的。
當您開始使用pop()
彈出對象時,您會看到剩余的對象被重新排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.