2013-03-24 66 views
5

我們如何使用STL priority_queue結構? 任何插圖推&彈出,其中結構有多個數據類型?
說:struct thing { int a; char b;} glass[10];
現在我怎麼可以把這個結構放在使用'int a'進行排序的priority_queue上?stl priority_queue的C++與struct

回答

12

這是對your original question, which you deleted的一個稍微修改的答案,沒有明顯的原因。原始文件包含了足夠的信息供您瞭解這一點,但這裏說明了這一點:提供一個比較小於int的比較用於比較。

您所需要做的就是提供一個函數,實現與嚴格弱排序的比較,或者實現相同的類的小於等於的運算符。這個結構是否滿足要求:

struct thing 
{ 
    int a; 
    char b; 
    bool operator<(const thing& rhs) const 
    { 
     return a < rhs.a; 
    } 
}; 

然後

std::priority_queue<thing> q; 
thing stuff = {42, 'x'}; 
q.push(stuff); 
q.push(thing{4242, 'y'}); // C++11 only 
q.emplace(424242, 'z'); // C++11 only  
thing otherStuff = q.top(); 
q.pop(); 
+0

謝謝^ _^ &只是最後一件事:我將如何推(3,a)隊列direclty?我不知道如何把(3,a)放到'事物= ** ... **'。 – 2013-03-24 18:09:33

+0

在C++ 11中,你可以說'q.push(東西{42,'x'})'或'q.emplace(42,'x')'。如果你沒有C++ 11的支持,你需要給'thing'一個構造函數。 – juanchopanza 2013-03-24 18:14:56

4

超載<運營商爲thing

struct thing 
{ 
    int a; 
    char b; 

    bool operator<(const thing &o) const 
    { 
     return a < o.a; 
    } 
}; 

priority_queue<thing> pq; 

thing t1, t2, t3; 

// ... 

pq.push(t1); 
pq.push(t2); 

// ... 

t3 = pq.top(); 
pq.pop(); 
2

你需要實現一個比較功能或超負荷運營商上告訴優先級隊列您要排序您的自定義數據的順序。當優先級隊列對數據進行排序時,它需要一種方法來了解如何在數據中進行比較。您必須通過將函數傳遞給優先隊列或重載運算符來指定此自定義數據類或結構。

您可以檢查this答案。 This可能會幫助你。我試圖解釋使用自定義數據類型的優先隊列的多種方法。