STL中优先队列的使用,关键是提供恰当的比较方式供队列内部使用。对于默认类型,比较符的选择确定了该优先队列是最大还是最小优先队列,对于自定义的结构体,如果比较方式没有选择好,会出现编译通过,但在第二次插入时出现运行时错误的问题。
头文件 <queue>
template <
class Type,
class Container=vector<Type>,
class Compare=less<typename Container::value_type>
>
class priority_queue
Type
The element data type to be stored in the priority_queue.
Container
The type of the underlying container used to implement the priority_queue.
Compare
The type that provides a function object that can compare two element values as sort keys to determine their relative order in the priority_queue. This argument is optional and the binary predicate less<typename Container::value_type> is the default value.
第二个参数我通常就用的vector<Type>,我其实也不太懂。
第三个参数其实是指明内部比较所使用的符号。当是最大优先队列的时候,用less<typename Container::value_type>(即用符号<作比较),当是最小优先队列的时候,用greater<typename Container::value_type>(即用符号>作比较)。
对于自定义的结构体,需要自己来写比较方法。有两种,一是重载操作符,二是比较类。
重载操作符
比较类