У меня есть следующий класс
class Person
{
string name;
string section;
};
Какая может быть реализация оператора сравнения для сохранения этого на карте?
Одна из возможных реализаций:
class Person
{
string name;
string section;
};
bool operator<(const Person& lhs, const Person& rhs) {
return lhs.name < rhs.name;
}
Это будет сортировать лексикографически по имени. Возможны другие заказы, в зависимости от ваших потребностей. Ваш вопрос немного неясен, потому что обычно вам нужно два типа для карты, тип ключа и тип значения. Сравнение требуется только для типа ключа, а не для типа значения.
Наверное, что-то вроде
#include <tuple> // for std::tie
struct ComparePersons
{
bool operator()(const Person& lhs, const Person& rhs) const
{
return std::tie(lhs.name, lhs,section) < std::tie(rhs.name, rhs.section);
}
};
Это выполняет лексикографическое меньше чем сравнение, используя name
первый и section
второй. Очевидно, это предполагает, что вы заинтересованы в использовании Person
s как ключи карты.