Создание priority_queue с deque не компилируется - с вектором это делает. Это почему? - PullRequest
3 голосов
/ 16 марта 2019

В приведенной ниже программе почему конструирование с deque завершается неудачно, но конструкция с vector в порядке ?

Оба предоставляют функции и итератор RandomAccess, ожидаемый priority_queue.Я не вижу причины.

Я проверил это на C ++ 98, C ++ 11 и C ++ 14: см. Тестовую программу

#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;
}

1 Ответ

4 голосов
/ 16 марта 2019

Вы пропустили указание 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;

Вот почему компилируется другая версия.

...