C++,请教一个优先权队列的问题,高手请进.

如果我想用一个优先权队列保存含有指针(动态内存分配)的对象,那应该保存这个对象的指针还是对象本身呢?如果保存对象本身的话,进行调整操作的时候就要涉及到对象的复制,赋值,感... 如果我想用一个优先权队列保存含有指针(动态内存分配)的对象,那应该保存这个对象的指针还是对象本身呢?如果保存对象本身的话,进行调整操作的时候就要涉及到对象的复制,赋值,感觉很麻烦,而且开销也很大。而保存对象指针的时候,会出现两个对象的指针相同的情况,好像也不行。究竟该怎样做呢?请高手帮帮忙,谢谢。用C++实现。
谢谢回答。
如果对象本身就比较大,入队的时候又要复制一个对象,岂不是开销很大。还有如果我的指针都是指向同一个变量,但是变量的内容是不同的,那怎么做呢?
展开
 我来答
napolengogo
2009-05-08 · 超过15用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:45.2万
展开全部
存对象还是对象的指针都行,存指针的时候,不会出现指针相同的睛况,除非你存入的指针都是指向的同一个对象变量,还有存对象开销也不是怎么大吧,其实存对象还是指针都差不多,我用stl写的一个小程序,存的是指针,没问题。是个最大优先队列。

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
struct node
{
int x,y;
};
class cmp
{
public:
bool operator()(node *a,node *b)
{
return a->x < b->x;
}
};

int main()
{
int x,y;
priority_queue<node*,vector<node*>,cmp> q;
while(cin >> x >> y && (x!=0&&y!=0))
{
node *p = new node;
p->x = x;
p->y = y;
q.push(p);
}
while(!q.empty())
{
node *p = new node;
p = q.top();
q.pop();
cout << p->x << " " << p->y << endl;
}
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式