使用STL在C ++中创建优先级队列

时间:2015-04-15 11:35:53

标签: c++

我正在学习使用STL的优先级队列。我在代码中遇到了这个声明。

priority_queue<node*,vector<node*>,compare> minHeap;

此处,nodecompare的定义如下:

struct node{
    char c;
    int f;
    struct node *left;
    struct node *right;
};

class compare{
    public:
   bool operator()(node *l,node *r)
    {
        return (*l).f>(*r).f;
    }
};

现在,我想知道第一个语句是什么意思? (即priority_queue.....

我知道它声明了一个优先级队列,但传递给它的参数究竟是什么意思?

1 个答案:

答案 0 :(得分:1)

此处还介绍了使用的模板参数:http://en.cppreference.com/w/cpp/container/priority_queue

第一个模板参数(我提供的链接中名为Tnode*定义了存储在队列中的数据类型。

第二个模板参数(我提供的链接中名为Container)定义了用于存储数据类型的容器类。在您包含的示例中,vector类用于存储类型node*的元素,因此也是此类型的模板参数。这意味着优先级队列将在内部将元素存储在向量类中,如果您愿意,可以使用任何其他容器类,只要它们符合概念SequenceContainer中指定的要求,并且实现frontpush_backpop_back方法。

第三个也是最后一个模板参数(我提供的链接中名为Compare)是用于进行内部比较的函数对象的名称,调用运算符(),带有对象比较 -