Именованные требования C++: Compare
Compare — набор требований, которым должны удовлетворять типы объектов-функций, предоставляемых пользователем и ожидаемых некоторыми средствами стандартной библиотеки.
Возвращаемое значение операции вызова функции, применённой к объекту типа, удовлетворяющего требованиям Compare, при преобразовании в bool даёт true, если первый аргумент вызова предшествует второму в отношении строгого слабого порядка, задаваемом этим типом, и false в противном случае.
Как и в случае любого BinaryPredicate, при вычислении этого выражения запрещено вызывать неконстантные функции через разыменованные итераторы, а с синтаксической точки зрения операция вызова функции должна принимать аргументы-объекты типа const и вести себя одинаково независимо от того, являются ли аргументы const или не-const.
Требования
Тип T удовлетворяет требованиям Compare, если
- тип
Tудовлетворяет требованиям BinaryPredicate, и
При заданных
-
comp— объект типаT, -
equiv(a, b)— эквивалентное выражение!comp(a, b) && !comp(b, a).
Следующие выражения должны быть корректны и иметь указанные эффекты:
| Выражение | Возвращаемый тип | Требования | ||||
|---|---|---|---|---|---|---|
comp(a, b) |
| Задаёт отношение строгого слабого порядка со следующими свойствами:
|
||||
equiv(a, b) | bool | Задаёт отношение эквивалентности со следующими свойствами:
|
Примечание: comp задаёт строгий линейный порядок на классах эквивалентности, определяемых equiv.
Стандартная библиотека
Следующие средства стандартной библиотеки требуют тип Compare.
| коллекция уникальных ключей, упорядоченных по ключам (шаблон класса) |
|
| коллекция пар ключ-значение, упорядоченных по ключам; ключи уникальны (шаблон класса) |
|
| коллекция ключей, упорядоченных по ключам (шаблон класса) |
|
| коллекция пар ключ-значение, упорядоченных по ключам (шаблон класса) |
|
| адаптирует контейнер для предоставления очереди с приоритетом (шаблон класса) |
|
| сортирует диапазон элементов (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| сортирует элементы (открытая функция-член std::forward_list<T,Allocator>) |
|
| сортирует элементы (открытая функция-член std::list<T,Allocator>) |
|
| сортирует диапазон элементов, сохраняя относительный порядок эквивалентных элементов (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| сортирует первые N элементов диапазона (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| копирует и частично сортирует диапазон элементов (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
|
(C++11) | проверяет, отсортирован ли диапазон (шаблон функции и объект-функция алгоритма) |
|
(C++20) | |
|
(C++11) | находит наибольший отсортированный поддиапазон (шаблон функции и объект-функция алгоритма) |
|
(C++20) | |
| находит N-й элемент, каким бы он был, если бы диапазон был отсортирован (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| с помощью бинарного поиска находит первый элемент, не меньший заданного значения (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| с помощью бинарного поиска находит первый элемент, больший заданного значения (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| с помощью бинарного поиска определяет, существует ли элемент в диапазоне (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| с помощью бинарного поиска находит диапазон элементов, соответствующих заданному значению (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| объединяет два отсортированных диапазона (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| объединяет два отсортированных списка (открытая функция-член std::forward_list<T,Allocator>) |
|
| объединяет два отсортированных списка (открытая функция-член std::list<T,Allocator>) |
|
| объединяет на месте два упорядоченных диапазона (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| определяет, является ли одна последовательность подпоследовательностью другой (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| вычисляет разность двух множеств (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| вычисляет пересечение двух множеств (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| вычисляет симметрическую разность двух множеств (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| вычисляет объединение двух множеств (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| добавляет элемент в max-кучу (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| удаляет наибольший элемент из max-кучи (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| создаёт max-кучу из диапазона элементов (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| преобразует max-кучу в диапазон элементов, отсортированных по возрастанию (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
|
(C++11) | проверяет, является ли заданный диапазон max-кучей (шаблон функции и объект-функция алгоритма) |
|
(C++20) | |
|
(C++11) | находит наибольший поддиапазон, являющийся max-кучей (шаблон функции и объект-функция алгоритма) |
|
(C++20) | |
| возвращает большее из заданных значений (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| возвращает наибольший элемент диапазона (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| возвращает меньшее из заданных значений (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| возвращает наименьший элемент диапазона (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
|
(C++11) | возвращает меньшее и большее из двух элементов (шаблон функции и объект-функция алгоритма) |
|
(C++20) | |
|
(C++11) | возвращает наименьший и наибольший элементы диапазона (шаблон функции и объект-функция алгоритма) |
|
(C++20) | |
| сравнивает два диапазона лексикографически (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| формирует следующую лексикографически большую перестановку элементов диапазона (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) | |
| формирует следующую лексикографически меньшую перестановку элементов диапазона (шаблон функции и объект-функция алгоритма) |
|
|
(C++20) |
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.
| DR | Применяется к | Опубликованное поведение | Правильное поведение |
|---|---|---|---|
|
LWG 2114 (P2167R3) | C++98 | контекстуальная преобразуемость возвращаемых типов в bool не соответствовала практике реализаций | требования исправлены |
| LWG 3031 | C++98 | требования к значениям const были недостаточными | требования усилены |
См. также
|
(C++20) | указывает, что relation задаёт строгий слабый порядок (концепт) |
| Операторы сравнения |
<, <=, >, >=, ==, != и <=> (C++20) сравнивают аргументы |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/Compare