Использовать контейнер по умолчанию, но пользовательский компаратор в priority_queue - PullRequest
0 голосов
/ 09 октября 2019

Можно ли использовать priority_queue с типом контейнера по умолчанию, но с пользовательским компаратором?

Другими словами, как мне обойтись, указав vector здесь?

auto cmp = [](int a, int b){ return a > b; };
priority_queue<int, vector<int>, decltype(cmp)> my_queue(cmp);

1 Ответ

1 голос
/ 09 октября 2019

Вы не можете. Это то же самое, что параметр функции по умолчанию, где вы должны указать параметр a, прежде чем сможете указать параметр b, даже если оба имеют значения по умолчанию и вы хотите сохранить a по умолчанию, например:

void foo(int a = 5, int b = 42);

Вы можете создать помощника, который создаст такую ​​очередь, но в конце вам все равно придется указать второй аргумент, даже если вы просто хотите использовать значение по умолчанию.

Что-то вроде:

template <typename T, typename Comp>
using default_priority_queue = std::priority_queue<T, std::vector<T>, Comp>;
...