12

我们如何将 STLpriority_queue用于 struct ?任何关于 push & popping 的说明,其中 struct 有多种数据类型?
说:struct thing { int a; char b;} glass[10];
现在我如何使用'int a'将这个结构放在priority_queue上进行排序?

4

4 回答 4

34

这是对您原始问题的略微修改的答案,您无缘无故地删除了该答案。int原件包含足够的信息让您弄清楚这一点,但在这里:提供一个使用for 比较的小于比较。

您需要做的就是提供一个函子,该函子通过严格的弱排序实现小于比较,或者为您的类实现相同的小于运算符。该结构满足要求:

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 回答