12

構造体にSTLを使用するにはどうすればよいpriority_queueですか?構造体に複数のデータ型があるプッシュ&ポップの図はありますか
言う:struct thing { int a; char b;} glass[10];
注文に「inta」を使用してこの構造体をpriority_queueに配置するにはどうすればよいですか?

4

4 に答える 4

34

これは、明確な理由なしに削除した元の質問に対するわずかに変更された回答です。オリジナルには、これを理解するのに十分な情報が含まれていましたが、ここで説明します。比較にforを使用する比較よりも少ない情報を提供しますint

あなたがする必要があるのは、厳密な弱順序との比較よりも少ないものを実装するファンクター、または同じものを実装するクラスのより少ない演算子を提供することです。この構造体は要件を満たしています。

struct thing
{
    int a;
    char b;
    bool operator<(const thing& rhs) const
    {
        return a < rhs.a;
    }
};

それから

std::priority_queue<thing> q;
thing stuff = {42, 'x'};
q.push(stuff);
q.push(thing{4242, 'y'}); // C++11 only
q.emplace(424242, 'z'); // C++11 only    
thing otherStuff = q.top();
q.pop();
于 2013-03-24T18:02:08.267 に答える
6

のオーバーロード<演算子thing

struct thing
{
    int a;
    char b;

    bool operator<(const thing &o) const
    {
        return a < o.a;
    }
};

priority_queue<thing> pq;

thing t1, t2, t3;

// ...

pq.push(t1);
pq.push(t2);

// ...

t3 = pq.top();
pq.pop();
于 2013-03-24T18:02:18.320 に答える
3

比較関数またはオーバーロード演算子を実装して、カスタムデータを並べ替える順序を優先キューに通知する必要があります。優先キューがデータをソートする場合、それらを比較する方法を知る方法が必要になります。これを指定するには、カスタムデータクラスまたは構造体の優先キューまたはオーバーロード演算子に関数を渡します。

あなたはこの答えをチェックすることができます。これはあなたを助けるかもしれません。カスタムデータ型に優先度付きキューを使用する複数の方法を説明しようとしました。

于 2017-07-10T16:53:32.337 に答える
0

あなたはこのようにそれを行うことができます!

struct example{
   int height;
   int weight;
};

struct comp{
        bool operator()(struct example a, struct example b){
         //Sorting on the basis of height(Just for example)
            return (a.height > b.height);
        }
    };

// And here comes your priority queue
 priority_queue<struct example, vector<struct example>, comp> pq;
struct example your_obj;
pq.push(your_obj);

于 2021-12-05T18:00:05.013 に答える