[問題] stl priority_queue less<MyClass*> ?

看板C_and_CPP (C/C++)作者 (小烏龜)時間16年前 (2009/11/25 18:23), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/5 (看更多)
問題描述: 有辦法傳指標給less或greater嗎? 遇到問題如下: #include <queue> using namespace std; class MyClass{ public: MyClass(int i){ x=i; } int x; }; void main(){ priority_queue< MyClass*, vector<MyClass*>, less<MyClass*> > test; test.push(new MyClass(1)); test.push(new MyClass(2)); while(!test.empty()){ printf("%d\n", test.top()->x); test.pop(); } return; } compiler雖然會過,但明顯不是我要的結果, 因為我一直無法實作 less<MyClass*> ! 使用 bool operator < ( const (MyClass*) & c1, const (MyClass*) & c2){ return c1->x < c2->x; } 無法編譯過,提示error C2803 至少必須擁有一個類別型別的型式參數(VC++) 目前我的解法如下: #include <queue> using namespace std; class MyClass{ public: MyClass(int i){ x = i; } int x; }; class MyClassPtr{ public: MyClassPtr(int i){ ptr = new MyClass(i); } MyClass * ptr; }; bool operator > ( const MyClassPtr & c1, const MyClassPtr & c2){ return c1.ptr->x > c2.ptr->x; } void main(){ priority_queue<MyClassPtr, vector<MyClassPtr>, greater<MyClassPtr>> test; test.push(MyClassPtr(1)); test.push(MyClassPtr(2)); while(!test.empty()){ printf("%d\n", test.top().ptr->x); test.pop(); } return; } 拿MyClassPtr 來包裝MyClass * 確實達到我的需求 只是想問有沒有其他簡單的方法? 還是我是否有觀念上的不清楚, 比如說stl容器本身不需要裝指標? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.22.10
文章代碼(AID): #1B3GMb4J (C_and_CPP)
文章代碼(AID): #1B3GMb4J (C_and_CPP)