簡體   English   中英

優先隊列對對象排序不正確(用戶定義的比較)

[英]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對象a0a1a2a3推入優先級隊列時,到達時間分別為2005030 ,優先級隊列似乎按照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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM