[問題] STL priority queue的operator overload

看板C_and_CPP (C/C++)作者 (真愛飛翔)時間13年前 (2012/09/15 19:52), 編輯推噓0(0011)
留言11則, 5人參與, 最新討論串1/1
開發平台(Platform): VC++ 問題(Question): STL的priority queue很好用大家都知道,然後我試著放進自訂struct,照著網路上的教學overload operator<這東西, 想讓他從小排到大,卻沒有成功,連看幾個網頁,試了幾次都失敗,想問問版友到底哪出問題了? 餵入的資料(Input): (0, 4) (先輸入 (2, 3) 預期的正確結果(Expected Output): (0, 4) (2, 3) 錯誤結果(Wrong Output): (2, 3) (0, 4) 程式碼(Code): struct PolygonPair{ Polygon *x; Polygon *y; }; bool operator<(PolygonPair &A, PolygonPair &B) { if (A.x -> getIndex() == B.x -> getIndex()) return A.y -> getIndex() >= B.y -> getIndex(); return A.x -> getIndex() >= B.x -> getIndex(); } priority_queue<PolygonPair*> violatePair; while (!violatePair.empty()){ cout << "(" << violatePair.top() -> x -> getIndex() << ", " << violatePair.top() -> y -> getIndex() << ") "; violatePair.pop(); } 補充說明(Supplement): 其實很明顯這個priority的實作連結著其他的系統,但太多也許不是重點就不貼。 A.x -> getIndex()回傳的是int,大概就這樣。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.53.35

09/15 21:20, , 1F
因為你這樣寫是用pointer (PolygonPair*) 的大小排序啊:~
09/15 21:20, 1F

09/15 23:05, , 2F
overload要return int
09/15 23:05, 2F

09/15 23:35, , 3F
你的priority_queue要存的是PolygonPair不是指標才有用
09/15 23:35, 3F

09/16 02:55, , 4F
一旦是指標,priority queue就一定不能正常運作嗎..
09/16 02:55, 4F

09/16 02:56, , 5F
把overload那邊改成指標形式也不行。
09/16 02:56, 5F

09/16 03:00, , 6F
因為容器裡面存的是指標 其他例如map的容器也會有相同的問題
09/16 03:00, 6F

09/16 03:01, , 7F
要嘛就是你直接存物件(PolygonPair)
09/16 03:01, 7F

09/16 03:02, , 8F
要不然就是自己給compare class (第三個template argument)
09/16 03:02, 8F

09/16 03:03, , 9F
要不然就是直接用boost的ptr_vector當pri queue底層的容器
09/16 03:03, 9F

09/16 03:27, , 10F
09/16 03:27, 10F

09/16 06:39, , 11F
文章代碼(AID): #1GL6m4vz (C_and_CPP)
文章代碼(AID): #1GL6m4vz (C_and_CPP)