[問題] priority_queue內容物比較

看板C_and_CPP作者 (rtt)時間12年前 (2013/04/14 17:06), 編輯推噓0(009)
留言9則, 2人參與, 最新討論串1/1
各位大大好 我在閱讀到C++ STL priority_queue書中 對於內容物比較不是很懂 struct Book { int QNum, Time; bool operator < (const book& a) const { return Time > a.Time|| (Time == a.Time && QNum > a.QNum); } }; int main() { priority_queue<Book> pq; Book i,j,k; i.QNum = 2002; i.Time = 5; pq.push(i); j.QNum = 2002; j.Time = 7; pq.push(j); k.Time = 3; k.QNum = 2002; pq.push(k); } 這程式結果是 Time小的會得到優先順序 比較想不清楚處的是運算子多載(operator <)這個函數 bool operator < (const book& a) const { return Time > a.Time|| (Time == a.Time && QNum > a.QNum); } 我的解讀是: 若是原本的book中的Time 大於 輸入的book中的Time(a.Time)則回傳true 則回傳值和operator < 的相互關係的如何? 感謝各位大大回答!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.68.2

04/14 18:05, , 1F
Book 裡那來的 Time?
04/14 18:05, 1F

04/14 18:06, , 2F
裡面也沒有QNum啊
04/14 18:06, 2F

04/14 18:12, , 3F
你可以在 debug 中觀察進到 operator < 的時候
04/14 18:12, 3F

04/14 18:13, , 4F
看看 *this 跟 a ,這兩個參數的變化
04/14 18:13, 4F

04/14 18:14, , 5F
他這個在排序的時候,如果回傳是 true 他就會把
04/14 18:14, 5F

04/14 18:14, , 6F
this跟a兩個做交換,這是本身就有的功能
04/14 18:14, 6F
※ 編輯: rtt2008 來自: 175.180.68.2 (04/14 18:19)

04/14 18:21, , 7F
04/14 18:21, 7F

04/14 18:22, , 8F
意思就是你不用原本的排序原則自己另外定義一個
04/14 18:22, 8F

04/14 19:07, , 9F
謝謝d大回覆!!
04/14 19:07, 9F
文章代碼(AID): #1HQd6O64 (C_and_CPP)