@dalbio

Можете объяснить как работает компаратор?

есть компаратор для set:
set<pair<int, int>,cmp>s;
struct cmp {
	bool operator() (const pair<int, int>& a, const pair<int, int>& b) const {
		int lena = a.second - a.first + 1;
		int lenb = b.second - b.first + 1;
		if (lena == lenb) return a.first < b.first;
		return lena > lenb;
	}
};

bool operator() специальное слово или можно назвать как угодно,почему он получает параметры как константы по ссылке (это специально или можно по значению)?
И зачем const в этом фрагменте?
const {
		int lena = a.second - a.first + 1;
		int lenb = b.second - b.first + 1;
		if (lena == lenb) return a.first < b.first;
		return lena > lenb;
	}

P.S Я новичок в с++ .Буду благодарен за помощь.
  • Вопрос задан
  • 245 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
const нужен потому, что если компаратор будет что-то в контейнере менять, у контейнера явно поедет крыша. Профессионалы вешают const (а еще лучше - constexpr) на любую сущность, которая не должна меняться по логике алгоритма.

Ссылки передаются по той простой причине, что это избавляет от вызова конструктора копирования и деструктора, что может быть крайне критично для некоторых тяжелых объектов, или же будет блокировать компиляцию с кучей ошибок, если объект не позволяет себя копировать
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы