Инициализируйте std :: priority_queue только с контейнером - PullRequest
0 голосов
/ 17 декабря 2018

Определив следующие псевдонимы,

using namespace std;

template <typename T>
using minheap = priority_queue<T, vector<T>, greater<T>>;

Мне было интересно, есть ли способ инициализировать priority_queue, просто вызывая конструктор с контейнером (в данном случае, вектором):

minheap<int> queue (vec);  // vec is some vector of integers

Но, похоже, это не так.Что работает, так это использование инициализатора на основе диапазона,

minheap<int> queue (vec.begin(), vec.end());

, что довольно уродливо, учитывая, что я хочу использовать весь вектор.


Среди других вариантов инициализации я прочитал следующую опцию: priority_queue (const Compare& comp, const Container& ctnr);.Но, очевидно, я слишком туп, чтобы понимать C ++, так как выполнение

minheap<int> queue (greater<int>, vec);

тоже не работает.В любом случае я бы подумал, что greater<int> не понадобится, поскольку я уже явно указал сравнение greater в объявлении псевдонима minheap.


Есть ли способ сделать что-то вроде minheap<int> q (vec);?Или я должен придерживаться (vec.begin(), vec.end())?

...