[問題] stl priority_queue less<MyClass*> ?
問題描述:
有辦法傳指標給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
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 5 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章