的C ++ STL priority_queue与结构(stl priority_queue of

2019-08-17 23:25发布

我们如何使用STL priority_queue的结构? 任何插图推&大跌眼镜,其中结构有多个数据类型?
你说: struct thing { int a; char b;} glass[10]; struct thing { int a; char b;} glass[10];
现在,我怎么能使用把这个结构上priority_queue“诠释了”订货?

Answer 1:

这里有一个稍微修改回答你原来的问题,你删除没有明显的原因。 原来包含足够的信息让你摸不着头脑,但这里有云:提供一个使用不到比较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();


Answer 2:

超载<运营商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();


Answer 3:

您需要实现一个比较功能或超负荷运营商告诉其上订购您想要自定义的数据进行排序优先级队列。 当优先级队列将您的数据进行排序,那么它将需要一种方法来知道如何当中比较。 你必须通过传递函数优先级队列或你超载运营商定制数据类或结构来指定。

您可以检查这个答案。 这可能会帮助你。 我试图解释使用优先级队列自定义数据类型的多种方式。



文章来源: stl priority_queue of C++ with struct