
C++,请教一个优先权队列的问题,高手请进.
如果我想用一个优先权队列保存含有指针(动态内存分配)的对象,那应该保存这个对象的指针还是对象本身呢?如果保存对象本身的话,进行调整操作的时候就要涉及到对象的复制,赋值,感...
如果我想用一个优先权队列保存含有指针(动态内存分配)的对象,那应该保存这个对象的指针还是对象本身呢?如果保存对象本身的话,进行调整操作的时候就要涉及到对象的复制,赋值,感觉很麻烦,而且开销也很大。而保存对象指针的时候,会出现两个对象的指针相同的情况,好像也不行。究竟该怎样做呢?请高手帮帮忙,谢谢。用C++实现。
谢谢回答。
如果对象本身就比较大,入队的时候又要复制一个对象,岂不是开销很大。还有如果我的指针都是指向同一个变量,但是变量的内容是不同的,那怎么做呢? 展开
谢谢回答。
如果对象本身就比较大,入队的时候又要复制一个对象,岂不是开销很大。还有如果我的指针都是指向同一个变量,但是变量的内容是不同的,那怎么做呢? 展开
1个回答
展开全部
存对象还是对象的指针都行,存指针的时候,不会出现指针相同的睛况,除非你存入的指针都是指向的同一个对象变量,还有存对象开销也不是怎么大吧,其实存对象还是指针都差不多,我用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;
}
#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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询