Я пытаюсь реализовать 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<
функционировать так, чтобы priority_queue
умеет их сортировать. Компилятор не предоставляет один по умолчанию. Есть несколько вариантов.
Чтобы получить код для компиляции без изменения объявления priority_queue<lol> q;
вам нужно будет предоставить оператору. Вы можете объявить это как свободную функцию. Вот пример; при условии, что вы сортируете lol
структура на основе num1
поле (не уверен, как ты на самом деле хочу сделать это).
bool operator< (const lol &left, const lol &right) {
return left.num1 < right.num1;
}
Обратите внимание, если num1
был частным, вам нужно сделать оператора другом lol
,
Других решений пока нет …