Я пытаюсь реализовать heapsort в C++, который возьмет в себе структуру двух целых чисел и отсортирует их в лексикографическом порядке. Однако Visual Studio бросает на меня кучу ошибок, например
Error 8 error C2784: 'bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'const lol'
Я действительно не знаю, что это значит, но я думаю, что что-то не так в самом заявлении. Я сделал это:
struct lol {
int num1;
int num2;
};
И я объявил priority_queue следующим образом:
priority_queue<lol> q;
Для типа lol
требуется operator<
function, так что priority_queue
знает, как их сортировать. Компилятор не предоставляет по умолчанию. Есть несколько вариантов.
Получить код для компиляции без изменения объявления priority_queue<lol> q;
вам нужно будет предоставить оператора. Вы можете объявить его свободной функцией. Вот пример; предполагая, что вы будете сортировать структуру lol
на основе поля num1
(не знаете, как вы на самом деле хотите это сделать).
bool operator< (const lol &left, const lol &right) {
return left.num1 < right.num1;
}
Обратите внимание, что если num1
был закрытым, вам нужно сделать оператором друга lol
.
lol
? Покажите код для этого.