priority_queue中第一个模板参数的用途是什么

What is the use of first template parameter in priority_queue

本文关键字:参数 是什么 queue 第一个 priority      更新时间:2023-10-16

对于std::priority_queue,我假设第一个模板参数指定了类型,第二个应该是该类型的容器。示例:

priority_queue<int, vector<int>> someQueue;

然而,以下代码编译后似乎运行良好:

class SomeClass
{
};
int main()
{
    priority_queue <SomeClass, vector<int>> pq;
    int x = 9;
    pq.push(x);
    int t = pq.top();
    cout << t << endl;
    pq.pop();
    return 0;
}

上述代码是否无效(即给出UB)?

如果有效-优先级队列中使用的第一个模板参数(即someClass)是什么。

通过LWG第2566期:在杰克逊维尔的工作文件中新投票

容器适配器的第一个模板参数T应表示与CCD_ 3类型相同。

写入std::priority_queue<SomeClass, std::vector<int>>相应地导致未定义的行为。

在C++11规范中,关于std::priority_queue的部分是§23.6.4。在它中,第一个模板参数只是用于容器的默认类型,而不是其他类型。

实际值类型取自容器。

该类被声明为

template<
    class T,
    class Container = std::vector<T>,
    class Compare = std::less<typename Container::value_type>
> class priority_queue;

[取自本参考文献]

该声明显示了第一个模板参数的使用方式、时间和位置。