меньше <T>класс и меньше чем оператор '<' - PullRequest
0 голосов
/ 02 августа 2020

В наборе стандартной библиотеки C ++ less<T> - это функтор по умолчанию, используемый для сравнения. Но всякий раз, когда мы создаем некоторый определяемый пользователем тип данных (например, используя структуру), а также перегружаем оператор «меньше» '<', при создании набора нашего настраиваемого типа данных не возникает проблем. </p>

Итак, мой вопрос заключается в том, что, поскольку набор использует less<T> по умолчанию для сравнения, почему не возникает проблем после того, как мы перегрузим оператор «<» меньше чем. какая связь между '<' и меньше? Я понимаю, что не возникнет проблем, если мы определим функтор для нашего определяемого пользователем типа данных, но я не могу понять, почему это срабатывает путем перегрузки оператора '<'. </p>

И, пожалуйста, примите Мой один последующий вопрос заключается в том, что всякий раз, когда создается набор для определяемого пользователем типа данных, что считается хорошей практикой для перегрузки оператора '<' или определения нашего собственного функтора и передачи его в качестве параметра шаблона. например: </p>

set<my_type,mycompar> myset

1 Ответ

3 голосов
/ 02 августа 2020

какая связь между '<' и less? </p>

Из ссылки для std :: less :

Функциональный объект для выполнения сравнений. Если не специализирован, вызывает operator< для типа T.

Таким образом, std::less определяется в терминах operator<. Пока вы можете сравнивать объекты вашего типа с operator<, std::less будет использовать именно это.

при создании набора для определяемого пользователем типа данных, что считается хорошей практикой для перегрузки оператора '<' или определения нашего собственного функтора и передачи его в качестве параметра шаблона? </p>

Это зависит от варианта использования. Если operator< имеет смысл для типа, вы должны определить его для этого типа.

Если operator< обычно не имеет смысла, но полезно для некоторого конкретного алгоритма, где вы используете set, затем передайте объект сравнения для этой c цели.

...