C++ 如何解释优先级队列的此模板签名?

C++ 如何解释优先级队列的此模板签名?,c++,templates,C++,Templates,我理解前两个模板参数,第一个模板参数是存储在优先级队列中的元素的数据类型,第二个是程序员想要使用的容器类型,它可以是deque或vector 但第三个论点让我有点困惑,因为我从未见过这样的东西。我会这样做: template <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;

我理解前两个模板参数,第一个模板参数是存储在优先级队列中的元素的数据类型,第二个是程序员想要使用的容器类型,它可以是deque或vector

但第三个论点让我有点困惑,因为我从未见过这样的东西。我会这样做:

template <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;    
它是否与优先级队列所需的严格弱排序标准有关?如果是,我如何了解更多信息?你能举一个使用第三个参数的例子吗


我是模板编程新手,非常感谢您的帮助。

第三个参数指定了comparator类

comparator类负责比较队列元素,以确定队列顺序。您已经了解到,队列中的元素首先以较高的值排序。这就是定义更高含义的地方

comparator类有一个简单的接口:给定两个值,如果第一个值小于第二个值,则返回true,否则返回false。默认实现std::less使用传统的运算符,因此这将以相反的顺序创建优先级队列,首先为您提供最低的值,而不是最高的值

或者,您可以创建自己的自定义比较器类,例如:

template <class T, class Container = vector<T>
class priority_queue{
    /* Implementation */
};
查看队列中每个int值的至少四位,从而将最后四位中具有最高值的所有int排序在具有较小值的int之前,忽略int中的所有其他位


p.S.Comparator类也与关联容器、集合和映射一起使用,并在那里提供相同的功能。通过精心设计一个comparator类,您可以创建集合和映射,其迭代器以某种顺序在集合/映射中的键上迭代,而不是按照您理解的从低到高的键的顺序,因为从本质上讲,最低和最高是指值。

它指定了您希望如何比较队列中的事物,以确定它们的优先级。默认情况下,它将使用std::less。第一个、第二个和第三个参数本质上是相同的-您到底不明白什么?由于您显然已经搜索过类似于您已经看到的用法示例的内容-不确定您为什么在帖子中要求它…@Alexei the same how?@latedeveloper,因此问题see title主要是关于读取签名的-因此第二个和第三个参数的格式相同-class c=type。我假设OP已经阅读了文档,并且知道比较是为了什么。。。
class last_four_bits {

public:

    bool operator()(int a, int b) const
    {
           return (a & 0x0F) < (b & 0x0F);
    }
};
std::priority_queue<int, std::vector<int>, last_four_bits>