std :: superior для пары std :: double и класса - PullRequest
0 голосов
/ 17 июня 2020

Работает ли std::greater, если у вас есть std::pair из int и класс?

Я пытаюсь создать очередь приоритетов пар, упорядоченных по первому элементу:

std::priority_queue<std::pair<double, classA>, std::vector<std::pair<double, classA>>, std::greater<std::pair<double, classA>>> priorityQueue

Но я получаю сообщение об ошибке:

нет совпадения for 'operator <' `</p>

И он ссылается на второй элемент std::pair, который имеет тип класса.

Применяется ли std::greater к первому и второму элементам std::pair?

Ответы [ 2 ]

3 голосов
/ 17 июня 2020

std::greater - это просто оболочка для вызова operator < типа шаблона. Для std::pair мы можем проверить ссылочный сайт здесь , и мы видим, что он говорит:

Сравнивает лексикографически lhs и rhs на operator<, то есть сравнивает первые элементы и только если они эквивалентны, сравнивает вторые элементы.

Итак, он использует operator < обоих типов, что означает, что ваш тип класса должен его предоставить. Поскольку этого не происходит, вы получаете ошибку компилятора.

0 голосов
/ 17 июня 2020

Ваш тип classA должен определять operator<. Обратите внимание, что std::pair сравнивается лексикографически.

...