我有一个名为MinPQ
(优先级队列)的类,它处理名为Item
的通用数据。在greater()
方法之外,其他方法正在对items
的索引进行处理。
greater()
方法正在比较两个不同的项目 - 请参阅下面的内容。
此方法适用于任何标准数据类型(Item
= int
,float
等...)但是用户定义的对象呢?
如何修改此MinPQ
类和greater()
方法以考虑更通用的对象?
MinPQ
类:
template <class Item> class MinPQ
{
private:
Item *items;
int N;
int queueSize;
void resize(int capacity);
void swim(int k);
bool greater(int i, int j);
void exch(int i, int j);
void sink(int k);
public:
MinPQ();
MinPQ(const MinPQ &pq);//copy constructor
~MinPQ();
void insert(Item item);
Item min();
inline int size(){return N-1;}
inline bool isEmpty(){return size() == 0;}
void print();
};
构造函数:
template <class Item> MinPQ<Item>::MinPQ(const MinPQ &pq)
{
N = pq.N;
queueSize = pq.queueSize;
items = new Item[queueSize];
for(int i = 0; i < N; ++i)
items[i] = pq.items[i];
}
template <class Item> MinPQ<Item>::MinPQ()
{
queueSize = 2;
items = new Item[queueSize];
N = 1;
}
greater()
方法:
template <class Item> bool MinPQ<Item>::greater(int i, int j)
{
return items[i] > items[j];
}
答案 0 :(得分:3)
定义SomeItem
后,您可以指定运算符>
将使用两个项目:
struct SomeItem
{
//item stuff
int item_property;
};
bool operator > (const SomeItem & a,const SomeItem & b)
{
return a.item_property > b.item_property;
}
//after this you can compare items based on item_property.
//...
MinPQ<SomeItem> a;
a.greather(0,1);//this will work as long as types used int MinPQ will have operator >
或者您可以直接在类型中重载操作符:
struct SomeItem
{
//item stuff
int item_property;
bool operator > (const SomeItem & other)const
{
return item_property > other.item_property;
}
};