将比较器传递给Priority_queue,称为班级成员

passing comparator to priority_queue declared as class member

本文关键字:成员 queue 比较器 Priority      更新时间:2023-10-16

当我尝试将Priority_queue用作类成员时,我就被卡住了。请查看下面的代码,让我知道为什么L1无法看到类型,但L2可以看到。我尝试了结构并放置了CTOR。

如果这是事物的工作方式,是否可以将Priority_queue声明为类成员,并在以后从功能内部传递比较器。

#include <iostream>
#include <queue>
#include <vector>
using namespace std;
class comprLess
{
    public:
            bool operator() (int p1, int p2)
            {
                return true;
            }
};

    class Something
    {
        public:
            comprLess cLess;
            //L1           
            priority_queue<int, vector<int>, comprLess> pq(cLess);  
            //Gives compilation error "syntax error: identifier 'cLess'"
            void Method()
            {
                //L2 
                priority_queue<int, vector<int>, comprLess> pq2(cLess); 
                //works fine
            }
    };

l1无法看到CLESS,因为它尚未构造;您处于班级定义阶段。当课程已经实例化时,请调用L2。

您使用了错误的语法。您需要更改括号。

priority_queue<int, vector<int>, comprLess> pq{cLess};

导致施工时优先队列初始化的初始化。或者,您可以在类构造函数中构造队列。

Something() : pq(cLess) {}