带有struct的C ++的stl priority_queue

时间:2013-03-24 17:56:07

标签: c++ struct priority-queue

我们如何在结构中使用STL priority_queue? 任何推动& amp;的插图 popping,struct有多种数据类型?
说:struct thing { int a; char b;} glass[10];
现在我如何使用'int a'将此结构放在priority_queue上进行排序?

3 个答案:

答案 0 :(得分:23)

这是对your original question, which you deleted的一个略微修改的答案,没有明显的理由。原始文件中包含足够的信息供您详细说明,但在此处:提供一个比使用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();

答案 1 :(得分:4)

<重载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();

答案 2 :(得分:2)

您需要实现比较函数或重载运算符,以告知优先级队列您要对自定义数据进行排序的顺序。当优先级队列对您的数据进行排序时,它将需要一种知道如何比较它们的方法。您必须通过将函数传递给自定义数据类或结构中的优先级队列或重载运算符来指定它。

您可以查看this回答。 This可能会对您有所帮助。我试图解释为自定义数据类型使用优先级队列的多种方法。