Namespaces
Variants

C++ named requirements: Compare

From ru.cppreference.net
C++ named requirements

Compare — это набор требований, предъявляемых некоторыми компонентами стандартной библиотеки к предоставляемым пользователем типам функциональных объектов.

Возвращаемое значение операции вызова функции, примененной к объекту типа, удовлетворяющего Compare , при преобразовании в bool , дает true , если первый аргумент вызова предшествует второму в отношении строгого слабого порядка , индуцированном этим типом, и false в противном случае.

Как и для любого BinaryPredicate , вычисление этого выражения не должно вызывать неконстантные функции через разыменованные итераторы и, синтаксически, операция вызова функции должна принимать const аргументы-объекты, с одинаковым поведением независимо от того, являются ли аргументы const или не- const .

Содержание

Требования

Тип T удовлетворяет требованиям Compare если

Дано

Следующие выражения должны быть корректными и иметь указанные эффекты:

Выражение Тип возвращаемого значения Требования
comp ( a, b )

удовлетворяет BooleanTestable

(до C++20)

моделирует boolean-testable

(начиная с C++20)
Устанавливает отношение строгого слабого порядка со следующими свойствами:
  • Для всех a , comp ( a, a ) == false .
  • Если comp ( a, b ) == true , то comp ( b, a ) == false .
  • Если comp ( a, b ) == true и comp ( b, c ) == true , то comp ( a, c ) == true .
equiv ( a, b ) bool Устанавливает отношение эквивалентности со следующими свойствами:
  • Для всех a , equiv ( a, a ) == true .
  • Если equiv ( a, b ) == true , то equiv ( b, a ) == true .
  • Если equiv ( a, b ) == true и equiv ( b, c ) == true , то equiv ( a, c ) == true .

Примечание: comp задаёт строгий полный порядок на классах эквивалентности, определённых с помощью equiv .

Стандартная библиотека

Следующие компоненты стандартной библиотеки ожидают тип Compare.

набор уникальных ключей, отсортированных по ключам
(шаблон класса)
набор пар ключ-значение, отсортированных по ключам, ключи уникальны
(шаблон класса)
набор ключей, отсортированных по ключам
(шаблон класса)
набор пар ключ-значение, отсортированных по ключам
(шаблон класса)
адаптирует контейнер для предоставления очереди с приоритетом
(шаблон класса)
сортирует диапазон элементов
(шаблон функции & объект функции алгоритма)
сортирует элементы
(открытая функция-член std::forward_list<T,Allocator>)
сортирует элементы
(открытая функция-член std::list<T,Allocator>)
сортирует диапазон элементов, сохраняя относительный порядок эквивалентных элементов
(шаблон функции & объект функции алгоритма)
сортирует первые N элементов диапазона
(шаблон функции & объект функции алгоритма)
копирует и частично сортирует диапазон элементов
(шаблон функции & объект функции алгоритма)
(C++11)
проверяет, отсортирован ли диапазон
(шаблон функции & объект функции алгоритма)
находит наибольшую отсортированную подпоследовательность
(шаблон функции & объект функции алгоритма)
находит N-й элемент, если бы диапазон был отсортирован
(шаблон функции & объект функции алгоритма)
находит первый элемент не меньше заданного значения с помощью бинарного поиска
(шаблон функции & объект функции алгоритма)
находит первый элемент больше заданного значения с помощью бинарного поиска
(шаблон функции & объект функции алгоритма)
определяет, существует ли элемент в диапазоне, с помощью бинарного поиска
(шаблон функции & объект функции алгоритма)
находит диапазон элементов, соответствующих заданному значению, с помощью бинарного поиска
(шаблон функции & объект функции алгоритма)
сливает два отсортированных диапазона
(шаблон функции & объект функции алгоритма)
сливает два отсортированных списка
(открытая функция-член std::forward_list<T,Allocator>)
сливает два отсортированных списка
(открытая функция-член std::list<T,Allocator>)
сливает два упорядоченных диапазона на месте
(шаблон функции & объект функции алгоритма)
определяет, является ли одна последовательность подпоследовательностью другой
(шаблон функции & объект функции алгоритма)
вычисляет разность двух множеств
(шаблон функции & объект функции алгоритма)
вычисляет пересечение двух множеств
(шаблон функции & объект функции алгоритма)
вычисляет симметрическую разность двух множеств
(шаблон функции & объект функции алгоритма)
вычисляет объединение двух множеств
(шаблон функции & объект функции алгоритма)
добавляет элемент в максимальную кучу
(шаблон функции & объект функции алгоритма)
удаляет наибольший элемент из максимальной кучи
(шаблон функции & объект функции алгоритма)
создает максимальную кучу из диапазона элементов
(шаблон функции & объект функции алгоритма)
преобразует максимальную кучу в диапазон элементов, отсортированных по возрастанию
(шаблон функции & объект функции алгоритма)
(C++11)
проверяет, является ли данный диапазон максимальной кучей
(шаблон функции & объект функции алгоритма)
находит наибольшую подпоследовательность, являющуюся максимальной кучей
(шаблон функции & объект функции алгоритма)
возвращает наибольшее из заданных значений
(шаблон функции & объект функции алгоритма)
возвращает наибольший элемент в диапазоне
(шаблон функции & объект функции алгоритма)
возвращает наименьшее из заданных значений
(шаблон функции & объект функции алгоритма)
возвращает наименьший элемент в диапазоне
(шаблон функции & объект функции алгоритма)
(C++11)
возвращает наименьший и наибольший из двух элементов
(шаблон функции & объект функции алгоритма)
возвращает наименьший и наибольший элементы в диапазоне
(шаблон функции & объект функции алгоритма)
сравнивает два диапазона лексикографически
(шаблон функции & объект функции алгоритма)
генерирует следующую лексикографически большую перестановку диапазона элементов
(шаблон функции & объект функции алгоритма)
генерирует следующую лексикографически меньшую перестановку диапазона элементов
(шаблон функции & объект функции алгоритма)

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

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 2114
( P2167R3 )
C++98 контекстуальная конвертируемость типов возвращаемых значений в bool не отражала
практику реализаций
требования исправлены
LWG 3031 C++98 требования к const значениям были недостаточными требования усилены

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

указывает, что relation задает строгое слабое упорядочение
(концепт)
Операторы сравнения < , <= , > , >= , == , != , и <=> (C++20) , сравнивают аргументы