不确定优先级队列的东西,因为我从未使用过它,但要进行直接排序,您可以这样做:
class A
{
friend struct ComparePtrToA;
public:
A( int v=0 ):a(v){}
private:
int a;
};
struct ComparePtrToA
{
bool operator()(A* a1, A* a2) {return a1->a < a2->a;}
};
#include <vector>
#include <algorithm>
int _tmain(int argc, _TCHAR* argv[])
{
vector<A*> someAs;
someAs.push_back(new A(1));
someAs.push_back(new A(3));
someAs.push_back(new A(2));
sort( someAs.begin(), someAs.end(), ComparePtrToA() );
}
注意内存泄漏,这只是一个例子......
进一步注意:这不是优先队列的实现!向量只是使用我创建的仿函数通过指针比较两个对象的示例。虽然我知道优先级队列是什么以及它大致如何工作,但我从未使用过实现它们的 STL 功能。
更新:我认为 TimW 提出了一些有效的观点。我不知道为什么他被如此低估了。我认为我的答案可以改进如下:
class A
{
public:
A( int v=0 ):a(v){}
bool operator<( const A& rhs ) { return a < rhs.a; }
private:
int a;
};
struct ComparePtrToA
{
bool operator()(A* a1, A* a2) {return *a1 < *a2;}
};
这更干净(特别是如果您考虑拥有一个值容器而不是指针 - 不需要进一步的工作)。