用Deque实例化Priority_queue不会与矢量进行编译.这是为什么

Instantiating priority_queue with deque does not compile - with vector it does. Why is that?

本文关键字:编译 为什么 Priority 实例化 Deque queue      更新时间:2023-10-16

在以下程序中,为什么使用deque的构造失败,而vector的构造则可以

均提供priority_queue预期的功能和随机访问迭代器。我看不到原因。

我对C 98,C 11和C 进行了测试:请参阅测试程序

#include <vector>
#include <deque>
#include <queue>
using namespace std;
int main()
{
    deque<int> d; 
    priority_queue<int> q(d.begin(), d.end());
    vector<int> v; 
    priority_queue<int> q1(less<int>(), v); //compiles
    deque<int> d1; 
    priority_queue<int> q2(less<int>(), d1); //does not compile
    return 0;
}

您错过了将deque<int>指定为priority_queue的模板参数:

deque<int> d1; 
priority_queue<int,deque<int>> q2(less<int>(), d1); 
                // ^^^^^^^^^^

请参阅此处的工作示例。

请参阅std::priority_queue的参考文档。std::vector被视为模板的默认类型参数:

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

这就是为什么其他版本编译的原因。

相关文章: