Spec-Zone.ru › C++

Именованные требования 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)

удовлетворяет требованиям 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.

set
коллекция уникальных ключей, упорядоченных по ключам
(шаблон класса)
map
коллекция пар ключ-значение, упорядоченных по ключам; ключи уникальны
(шаблон класса)
multiset
коллекция ключей, упорядоченных по ключам
(шаблон класса)
multimap
коллекция пар ключ-значение, упорядоченных по ключам
(шаблон класса)
priority_queue
адаптирует контейнер для предоставления очереди с приоритетом
(шаблон класса)
sort
сортирует диапазон элементов
(шаблон функции и объект-функция алгоритма)
ranges::sort
(C++20)
sort
сортирует элементы
(открытая функция-член std::forward_list<T,Allocator>)
sort
сортирует элементы
(открытая функция-член std::list<T,Allocator>)
stable_sort
сортирует диапазон элементов, сохраняя относительный порядок эквивалентных элементов
(шаблон функции и объект-функция алгоритма)
ranges::stable_sort
(C++20)
partial_sort
сортирует первые N элементов диапазона
(шаблон функции и объект-функция алгоритма)
ranges::partial_sort
(C++20)
partial_sort_copy
копирует и частично сортирует диапазон элементов
(шаблон функции и объект-функция алгоритма)
ranges::partial_sort_copy
(C++20)
is_sorted
(C++11)
проверяет, отсортирован ли диапазон
(шаблон функции и объект-функция алгоритма)
ranges::is_sorted
(C++20)
is_sorted_until
(C++11)
находит наибольший отсортированный поддиапазон
(шаблон функции и объект-функция алгоритма)
ranges::is_sorted_until
(C++20)
nth_element
находит N-й элемент, каким бы он был, если бы диапазон был отсортирован
(шаблон функции и объект-функция алгоритма)
ranges::nth_element
(C++20)
lower_bound
с помощью бинарного поиска находит первый элемент, не меньший заданного значения
(шаблон функции и объект-функция алгоритма)
ranges::lower_bound
(C++20)
upper_bound
с помощью бинарного поиска находит первый элемент, больший заданного значения
(шаблон функции и объект-функция алгоритма)
ranges::upper_bound
(C++20)
binary_search
с помощью бинарного поиска определяет, существует ли элемент в диапазоне
(шаблон функции и объект-функция алгоритма)
ranges::binary_search
(C++20)
equal_range
с помощью бинарного поиска находит диапазон элементов, соответствующих заданному значению
(шаблон функции и объект-функция алгоритма)
ranges::equal_range
(C++20)
merge
объединяет два отсортированных диапазона
(шаблон функции и объект-функция алгоритма)
ranges::merge
(C++20)
merge
объединяет два отсортированных списка
(открытая функция-член std::forward_list<T,Allocator>)
merge
объединяет два отсортированных списка
(открытая функция-член std::list<T,Allocator>)
inplace_merge
объединяет на месте два упорядоченных диапазона
(шаблон функции и объект-функция алгоритма)
ranges::inplace_merge
(C++20)
includes
определяет, является ли одна последовательность подпоследовательностью другой
(шаблон функции и объект-функция алгоритма)
ranges::includes
(C++20)
set_difference
вычисляет разность двух множеств
(шаблон функции и объект-функция алгоритма)
ranges::set_difference
(C++20)
set_intersection
вычисляет пересечение двух множеств
(шаблон функции и объект-функция алгоритма)
ranges::set_intersection
(C++20)
set_symmetric_difference
вычисляет симметрическую разность двух множеств
(шаблон функции и объект-функция алгоритма)
ranges::set_symmetric_difference
(C++20)
set_union
вычисляет объединение двух множеств
(шаблон функции и объект-функция алгоритма)
ranges::set_union
(C++20)
push_heap
добавляет элемент в max-кучу
(шаблон функции и объект-функция алгоритма)
ranges::push_heap
(C++20)
pop_heap
удаляет наибольший элемент из max-кучи
(шаблон функции и объект-функция алгоритма)
ranges::pop_heap
(C++20)
make_heap
создаёт max-кучу из диапазона элементов
(шаблон функции и объект-функция алгоритма)
ranges::make_heap
(C++20)
sort_heap
преобразует max-кучу в диапазон элементов, отсортированных по возрастанию
(шаблон функции и объект-функция алгоритма)
ranges::sort_heap
(C++20)
is_heap
(C++11)
проверяет, является ли заданный диапазон max-кучей
(шаблон функции и объект-функция алгоритма)
ranges::is_heap
(C++20)
is_heap_until
(C++11)
находит наибольший поддиапазон, являющийся max-кучей
(шаблон функции и объект-функция алгоритма)
ranges::is_heap_until
(C++20)
max
возвращает большее из заданных значений
(шаблон функции и объект-функция алгоритма)
ranges::max
(C++20)
max_element
возвращает наибольший элемент диапазона
(шаблон функции и объект-функция алгоритма)
ranges::max_element
(C++20)
min
возвращает меньшее из заданных значений
(шаблон функции и объект-функция алгоритма)
ranges::min
(C++20)
min_element
возвращает наименьший элемент диапазона
(шаблон функции и объект-функция алгоритма)
ranges::min_element
(C++20)
minmax
(C++11)
возвращает меньшее и большее из двух элементов
(шаблон функции и объект-функция алгоритма)
ranges::minmax
(C++20)
minmax_element
(C++11)
возвращает наименьший и наибольший элементы диапазона
(шаблон функции и объект-функция алгоритма)
ranges::minmax_element
(C++20)
lexicographical_compare
сравнивает два диапазона лексикографически
(шаблон функции и объект-функция алгоритма)
ranges::lexicographical_compare
(C++20)
next_permutation
формирует следующую лексикографически большую перестановку элементов диапазона
(шаблон функции и объект-функция алгоритма)
ranges::next_permutation
(C++20)
prev_permutation
формирует следующую лексикографически меньшую перестановку элементов диапазона
(шаблон функции и объект-функция алгоритма)
ranges::prev_permutation
(C++20)

Отчёты об ошибках

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

DR Применяется к Опубликованное поведение Правильное поведение
LWG 2114
(P2167R3)
C++98 контекстуальная преобразуемость возвращаемых типов в bool не
соответствовала практике реализаций
требования исправлены
LWG 3031 C++98 требования к значениям const были недостаточными требования усилены

См. также

strict_weak_order
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API