2015-04-15 68 views
-13

我正在学习使用STL的优先级队列。我在代码中看到了这个陈述。使用STL在C++中创建优先级队列

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.....

我知道它声明了优先级队列,但传递给它的参数究竟意味着什么呢?

+0

HTTP ://www.cplusplus.com/reference/queue/priority_queue/ –

+2

您可以查看[en.cppreference](http://en.cppreference.com/w/cpp/container/priority_queue)或[www.cplusplus。 COM](http://www.cplusplus.com/reference/queue/priority_queue/)。 – Jarod42

+1

你看过[参考资料](http://en.cppreference.com/w/cpp/container/priority_queue)吗?第一个是元素类型,第二个是底层容器,第三个是用于比较元素优先级的函数类型。 –

回答

1

所使用的模板的参数也被描述如下:http://en.cppreference.com/w/cpp/container/priority_queue

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

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

第三和最后一个模板参数(在我所提供的链接命名Compare)是一种用于执行内部比较功能对象的名称,操作者()被调用时,与该对象compare-