Пространства имён
Варианты
Действия

std::ranges::equal_to

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Объекты функции
Функции обёртки
(C++11)
(C++11)
Применение частичных функций
(C++20)(C++23)
(C++11)
Вызов функции
(C++17)(C++23)
Объект идентичности функции
(C++20)
Обёртки ссылок
(C++11)(C++11)
Прозрачные обёртки операторов
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

Отрицатели
(C++17)
Искатели
Ограниченные компараторы
Старые привязки и адаптеры
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
(до C++17*)(до C++17*)
(до C++17*)(до C++17*)

(до C++17*)
(до C++17*)(до C++17*)(до C++17*)(до C++17*)
(до C++20*)
(до C++20*)
 
<tbody> </tbody>
Определено в заголовочном файле <functional>
struct equal_to;
(начиная с C++20)

Функциональный объект для выполнения сравнений. Типы параметров оператора вызова функции (но не тип возвращаемого значения) выводятся из аргументов.

Определяемый реализацией строгий общий порядок указателей

Оператор вызова функции выдаёт определённый реализацией строгий общий порядок указателей, если оператор = между аргументами вызывает встроенный оператор сравнения для указателей, даже если встроенный = оператор нет.

Строгий общий порядок, определяемый реализацией, согласуется с частичным порядком, налагаемым встроенными операторами сравнения (<=>, <, >, <= и >=), и согласуется со следующими стандартными функциональными объектами:

  • std::less, std::greater, std::less_equal и std::greater_equal, когда аргумент шаблона тип указателя или void

Типы элементы

Тип элемент Определение
is_transparent /* неопределено */

Функции-элементы

проверяет, равны ли аргументы
(public функция-элемент)

std::ranges::equal_to::operator()

<tbody> </tbody>
template< class T, class U > requires std::equality_comparable_with<T, U> // с разными семантическими требованиями constexpr bool operator()( T&& t, U&& u ) const;

Сравнивает t и u, что эквивалентно return std::forward<T>(t) == std::forward<U>(u);, за исключением случаев, когда это выражение разрешается вызовом встроенного operator== сравнения указателей.

Когда вызов не вызывает встроенный оператор сравнения указателей, поведение не определено, если std::equality_comparable_with<T, U> не моделируется.

Когда вызов вызывает встроенный оператор, сравнивающий указатели типа P, вместо этого результат определяется следующим образом:

  • Возвращает false, если одно из (возможно преобразованного) значения первого аргумента и (возможно преобразованного) значения второго аргумента предшествует другому в определяемом реализацией строгом общем порядке для всех значений указателя типа P. Этот строгий полный порядок согласуется с частичным порядком, заданным встроенными операторами <, >, <= и >=.
  • Иначе (ни одно не предшествует другому), возвращает true.

Поведение не определено, если только последовательности преобразования из T и U в P не сохраняют равенство.

Сохранение равенства

Выражения, объявленные в выражениях requires концептов стандартной библиотеки, должны сохранять равенство (если не указано иное).

Примечание

По сравнению с std::equal_to, std::ranges::equal_to дополнительно требует, чтобы != было действительным, и чтобы оба типа аргументов были (однородно) сопоставимыми сами с собой (через ограничение equality_comparable_with).

Пример

Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 3530 C++20 синтаксические проверки при сравнении указателей были ослаблены смягчены только семантические
требования

Смотрите также

функциональный объект, реализующий x == y
(шаблон класса) [править]