Невозможно использовать std :: больше там, где используется std :: less - PullRequest
1 голос
/ 06 мая 2020

Этот код компилируется отлично:

#include <queue>
#include <functional>
std::priority_queue<int> q (std::less<int>{});

, тогда как этот код дает странные ошибки компиляции

#include <queue>
#include <functional>
std::priority_queue<int> q (std::greater<int>{});

1 Ответ

2 голосов
/ 06 мая 2020

Третий аргумент шаблона для std::priority_queue по умолчанию равен std::less. Итак, вызываемый вами конструктор ожидает объект std::less. Вам нужно изменить третий аргумент шаблона:

std::priority_queue<int, std::vector<T>, std::greater<int>> q (std::greater<int>{});

Передача std::greater<int>{} также не нужна, поскольку есть конструктор по умолчанию, который сделает это за вас.

std::priority_queue<int, std::vector<T>, std::greater<int>> q;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...