У меня есть вектор объектов Student, который я хочу, чтобы отсортировать с помощью #include <algorithm>
и sort(list.begin(), list.end());
Проблема перегрузки оператора <в C++
Для того, чтобы сделать это, я понимаю, что мне нужно перегрузить «<» оператора, но после того, как пытаясь (и неудачно) с несколькими методами, предлагаемыми в Интернете, у меня заканчиваются идеи.
Вот моя последняя попытка:
В Student.h ...
...
using namespace std;
class Student
{
friend bool operator <(const Student& first, const Student& second);
public:
...
private:
...
};
И в Student.cpp ...
...
#include "Student.h"
using namespace std;
...
bool operator <(const Student& first, const Student& second)
{
return first.Name() < second.Name();
}
где "Имя()" является постоянная функция, которая возвращает строку.
Программа компилируется и работает, но мой оператор-функция не вызывается во время сортировки и когда я пытался сравнивать два Student объекты, такие как s1 < s2
я получил «Ошибка: перегруженный оператор не найден»
Как я могу правильно перегрузочную этот оператор, чтобы мой сорт работал, как я предполагаю?
Я думаю, что, наконец, я решил ответить на этот вопрос, потому что именно тот, который наиболее непосредственно дал мне определение большей проблемы, которую я имел с моими указателями. –
Этот подход часто избегается, потому что, если типы конвертируются в Student, код преобразует правый тип, но не левый тип. Функция друга будет вести себя последовательно для обеих сторон. –