Heapsort структуры

0

Я пытаюсь реализовать 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;
  • 2
    Вы определили оператор сравнения для lol ? Покажите код для этого.
  • 0
    На самом деле, я не сделал. Можете ли вы рассказать мне больше о том, что это такое? Я нашел несколько статей об этих операторах, но я не понимаю, как они работают.
Показать ещё 6 комментариев
Теги:
algorithm
stl
queue
heapsort

1 ответ

0
Лучший ответ

Для типа 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.

  • 0
    Проблема решена, спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню