私はそれを使用したことがないため、優先キューについてはわかりませんが、単純な並べ替えを行うには、次のようにします。
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() );
}
メモリリークに注意してください。これは単なる例です...
さらに注意: これは優先キューの実装を意図したものではありません! ベクトルは、私が作成したファンクターを使用して、ポインターを介して 2 つのオブジェクトを比較する単なる例です。プライオリティ キューとは何か、おおまかなしくみは知っていますが、それらを実装する 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;}
};
これはよりクリーンです(特に、ポインターではなく値のコンテナーを使用することを検討している場合-それ以上の作業は必要ありません)。