Библиотеки и функции для работы со строками в си

Похожесть двух строк

Задача: есть две строки, требуется вычислить степень их похожести числом от 0 до 100


В FuzzyWuzzy для этого есть несколько функций, отличающихся подходом к сравнению и вниманием к деталям. Не забудем импортировать:

from fuzzywuzzy import fuzz

Функция – простое посимвольное сравнение. Рейтинг 100 только если строки полностью равны, любое различие уменьшает рейтинг, будь то знаки препинания, регистр букв, порядок слов и так далее:

>>> fuzz.ratio("я люблю спать", "я люблю спать")
100
>>> fuzz.ratio("я люблю спать", "Я люблю cпать!")
81
>>> fuzz.ratio("я люблю спать", "я люблю есть")
88

Обратите внимание, что рейтинг второго примера ниже, чем у третьего, хотя по смыслу должно быть наоборот. Следующая функция решает эту проблему

Теперь акцент именно на сами слова, игнорируя регистр букв, порядок слов и даже знаки препинания по краям строки

Следующая функция решает эту проблему. Теперь акцент именно на сами слова, игнорируя регистр букв, порядок слов и даже знаки препинания по краям строки.

>>> fuzz.token_sort_ratio("я люблю спать", "я люблю есть")
56
>>> fuzz.token_sort_ratio("я люблю спать", "Я люблю спать!")
100
>>> fuzz.token_sort_ratio("я люблю спать", "спать люблю я...")
100

>>> fuzz.token_sort_ratio("Мал да удал", "удал да МАЛ")
100
>>> fuzz.token_sort_ratio("Мал да удал", "Да Мал Удал")
100

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

Функция пошла еще дальше: она игнорирует повторяющиеся слова, учитывает только уникальные.

>>> fuzz.token_set_ratio("я люблю спать", "люблю я спать, спать, спать...")
100
>>> fuzz.token_set_ratio("я люблю спать", "люблю я спать, спать и спать...")
100
>>> fuzz.token_set_ratio("я люблю спать", "но надо работать")
28

# повторы в token_sort_ratio роняют рейтинг! 
>>> fuzz.token_sort_ratio("я люблю спать", "люблю я спать, спать и спать.")
65

# но вот это странно:
>>> fuzz.token_set_ratio("я люблю спать", "люблю я спать, но надо работать")
100
>>> fuzz.token_set_ratio("я люблю спать", "люблю я спать, люблю я есть")
100

Последние два примера вернули 100, хотя добавлены новые слова, и это странно. Тут следует вспомнить о , которая ведет себя также. А именно, проверяет вхождение одной строки в другую. Лишние слова игнорируются, главное – оценить, чтобы ядро было одно и тоже.

>>> fuzz.partial_ratio("одно я знаю точно", "одно я знаю")
100
>>> fuzz.partial_ratio("одно я знаю точно", "одно я знаю!")
92
>>> fuzz.partial_ratio("одно я знаю точно", "я знаю")
100

Еще еще более навороченный метод , который работает ближе к человеческой логике, комбинируя несколько методов в один алгоритм в определенными весами (отсюда и название WRatio = Weighted Ratio).

>>> fuzz.WRatio("я люблю спать", "люблю Я СПАТЬ!")
95
>>> fuzz.WRatio("я люблю спать", "люблю Я СПАТЬ и есть")
86
>>> fuzz.WRatio("я люблю спать", "!!СПАТЬ ЛЮБЛЮ Я!!")
95

Нечеткий поиск

Задача: найти в списке строк одну или несколько наиболее похожих на поисковый запрос.

Импортируем подмодуль и применим или :

from fuzzywuzzy import process

strings = 
process.extract("Прив", strings, limit=3)
# 

process.extractOne("Прив", strings)
# ('привет', 90)

Удаление дубликатов

Очень полезная функция для обработки данных. Представьте, что вам досталась 1С база номенклатуры запчастей, там полный бардак, и вам нужно поудалять лишние повторяющиеся позиции товара, но где-то пробелы лишние, где-то буква перепутана и тому подобное. Тут пригодится .

Первый аргумент – исходный список, второй – порог исключения (70 по умолчанию), третий – алгоритм сравнения (token_set_ratio по умолчанию).

Пример:

arr = 

print(list(process.dedupe(arr)))
# 

FuzzyWuzzy можно применять совместно с Pandas. Например так (без особых подробностей):

def get_ratio(row):
    name = row['Last/Business Name']
    return fuzz.token_sort_ratio(name, "Alaska Sea Pilot PAC Fund")

df

Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway  

230

1С+Классы. Версия-0

Разработано ООП-расширение языка 1С, включающее (но не ограничивающееся): Классы как абстрактные типы данных с элементами «переменная», «свойство», «функция», «процедура»; Интерфейсы как абстрактные классы без элементов состояния («переменная») и без привязки к реализации методов (свойств, процедур, функций) при определении; Имплементация (реализация) интерфейсов классами; — одиночное открытое наследование; Области видимости «внутренняя» (private), «экспорт» (public), «защищенная» (protected); Статические элементы классов (общие для всех экземпляров класса); Замещение (переопределение реализации) методов при наследовании – «виртуальные методы, свойства»; Сокрытие (затенение) обычных (не замещаемых) элементов при наследовании; Перегрузка процедур и функций по количеству и типам данных аргументов; Конструкторы класса; Деструктор класса; Слабые ссылки; Делегаты.

1 стартмани

28.10.2016    19945    1    IntelInside    68    

Операторы сравнения

Операторы сравнения – это операторы, которые сравнивают значения и возвращают true или false. При сравнении строк в Bash вы можете использовать следующие операторы:

  • string1 = string2 и string1 == string2- Оператор равенства возвращает true, если операнды равны.
    • Используйте =оператор с test командой [.
    • Используйте ==оператор с командой [[ для сопоставления с образцом.
  • string1 != string2 – Оператор неравенства возвращает true, если операнды не равны.
  • string1 =~ regex- Оператор регулярного выражения возвращает true, если левый операнд соответствует расширенному регулярному выражению справа.
  • string1 > string2 – Оператор «больше чем» возвращает истину, если левый операнд больше правого, отсортированного по лексикографическому (алфавитному) порядку.
  • string1 < string2 – Оператор less than возвращает true, если правый операнд больше правого, отсортированного по лексикографическому (алфавитному) порядку.
  • -z string – Истина, если длина строки равна нулю.
  • -n string – Истина, если длина строки не равна нулю.

Ниже следует отметить несколько моментов при сравнении строк:

  • Пустое пространство должно быть использовано между бинарным оператором и операндами.
  • Всегда используйте двойные кавычки вокруг имен переменных, чтобы избежать каких-либо проблем с разделением слов или сбоев.
  • Bash не разделяет переменные по «типу», переменные обрабатываются как целое число или строка в зависимости от контекста.

Постоянство строк

Как ни странно, содержимое объекта типа string не подлежит изменению. Это означает, что однажды созданную последовательность символов изменить нельзя. Но данное ограничение способствует более эффективной реализации символьных строк. Поэтому этот, на первый взгляд, очевидный недостаток на самом деле превращается в преимущество. Так, если требуется строка в качестве разновидности уже имеющейся строки, то для этой цели следует создать новую строку, содержащую все необходимые изменения. А поскольку неиспользуемые строковые объекты автоматически собираются в «мусор», то о дальнейшей судьбе ненужных строк можно даже не беспокоиться.

Следует, однако, подчеркнуть, что переменные ссылки на строки (т.е. объекты типа string) подлежат изменению, а следовательно, они могут ссылаться на другой объект. Но содержимое самого объекта типа string не меняется после его создания.


Рассмотрим пример:

Скомпилируем приложение и загрузим результирующую сборку в утилиту ildasm.exe. На рисунке показан CIL-код, который будет сгенерирован для метода void addNewString():

Обратите внимание на наличие многочисленных вызовов кода операции ldstr (загрузка строки). Этот код операции ldstr в CIL предусматривает выполнение загрузки нового объекта string в управляемую кучу. В результате предыдущий объект, в котором содержалось значение «This is my stroke», будет в конечном итоге удален сборщиком мусора

Конверсия число-строка и строка-число.

int atoi (const char * str);

Переводит строку в целое

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void main() {
	char ex1[] = "   23  ";
	char ex2[] = "rule43";
	char ex3[] = "21st of May";
	printf("%d\n", atoi(ex1));
	printf("%d\n", atoi(ex2));
	printf("%d\n", atoi(ex3));
	getch();
}
double atof (const char* str);

Переводит строку в число типа double.

long int atol ( const char * str );

Переводит строку в число типа long

Все функции такого рода имеют название XtoY, где X и Y — сокращения типов. A обозначает ASCII. Соответственно, имеется обратная функция itoa (больше нет:)). Таких функций в библиотеке stdlib.h очень много, все их рассматривать не хватит места.

Решение задачи Эйнштейна на платформе 1с

Недавно мне попалась интересная задача по созданию обработки, которая будет решать «задачу Эйнштейна». Изначально кажется, что можно просто прописать все явные и неявные условия через «Если», но это не верно. При таком подходе задачу решает ваш мозг, а решить задачу должна сама обработка основываясь только на условиях явно прописанных в тексте. Разработчик не должен делать никаких выводов и прописывать косвенные условия вытекающие из условия задачи. Условия задачи в коде должны переставляться в любом сочетании и это не должно влиять на решение.

1 стартмани

12.08.2020    618        itmind    2    

CompareOrdinalCompareOrdinal

Метод String.CompareOrdinal сравнивает два строковых объекта без учета локального языка и региональных параметров.The String.CompareOrdinal method compares two string objects without considering the local culture. Возвращаемые этим методом значения идентичны значениям, возвращаемым методом Compare в предыдущей таблице.The return values of this method are identical to the values returned by the Compare method in the previous table.

Важно!

Метод String.CompareOrdinal в основном предназначен для использования при упорядочивании или сортировке строк.The String.CompareOrdinal method is primarily intended for use when ordering or sorting strings. Не следует использовать метод String.CompareOrdinal для проверки на равенство (то есть для явного поиска возвращаемого значения 0 без учета того, является ли одна строка меньше или больше другой).You should not use the String.CompareOrdinal method to test for equality (that is, to explicitly look for a return value of 0 with no regard for whether one string is less than or greater than the other). Для определения равенства двух строк используйте метод .Instead, to determine whether two strings are equal, use the method.

В примере ниже метод CompareOrdinal используется для сравнения значений двух строк.The following example uses the CompareOrdinal method to compare the values of two strings.

Этот пример выводит на консоль значение .This example displays to the console.

4 ответа

75

Существует пакет под названием . Установить через pip:

Простое использование:

Пакет построен поверх . Почему бы просто не использовать это, спросите вы? Помимо того, что он немного проще, он имеет множество различных методов сопоставления (например, нечувствительность к токену, частичное совпадение строк), которые делают его более эффективным на практике. Особенно полезны функции : найдите наилучшие совпадающие строки и отношения из набора. Из их readme:

12 фев. 2015, в 01:36 Поделиться 66

В стандартной библиотеке есть модуль (называемый ), который может сравнивать строки и возвращать оценку на основе их сходства. Класс должен делать то, что вам нужно.

EDIT: Маленький пример из приглашения python:

НТН!

30 апр. 2012, в 13:55 Поделиться 8

намного быстрее, чем () для индексирования и поиска.

Предупреждение. Будьте осторожны, чтобы не смешивать и в вашем fuzzyset.

11 июль 2016, в 21:32 Поделиться


Задача называется Идентификация парафраз, которая является активной областью исследований в области обработки естественного языка. Я связал несколько статей, многие из которых вы можете найти с открытым исходным кодом на GitHub для.

Обратите внимание, что весь ответ на вопрос предполагает, что между двумя предложениями существует некоторое сходство строк и поверхностей, в то время как в действительности два предложения с небольшим сходством строк могут быть семантически похожими. Если вы заинтересованы в подобном сходстве, вы можете использовать Skip-Thoughts. Установите программное обеспечение в соответствии с руководствами GitHub и перейдите к разделу обнаружения парафраза в файле readme:

Если вы заинтересованы в подобном сходстве, вы можете использовать Skip-Thoughts. Установите программное обеспечение в соответствии с руководствами GitHub и перейдите к разделу обнаружения парафраза в файле readme:

Это преобразует ваши предложения (X_sentences) в векторы. Позже вы можете найти сходство двух векторов:

где мы принимаем вектор и вектор — соответствующий вектор для X_sentences , X_sentences , который вы хотели бы найти в своих оценках.

Существуют другие модели для преобразования предложения в вектор, который вы можете найти здесь.

Как только вы конвертируете свои предложения в векторы, сходство — это просто вопрос нахождения сходства Косина между этими векторами.

23 нояб. 2016, в 03:43 Поделиться

Ещё вопросы

  • 817Джанго масштабируется?
  • 242Разработка Django IDE
  • 175Django datetime проблемы (по умолчанию = datetime.now ())
  • 151Правильный способ обработки нескольких форм на одной странице в Django
  • 129Используя Python os.path, как мне перейти на один каталог?
  • 112Создание поля динамического выбора
  • 113Символ новой строки CSV, видимый в поле без кавычек
  • 105Как продублировать virtualenv
  • 95Настройка Django по умолчанию
  • 90Django: получить объект из БД или None, если ничего не найдено

Решение задачи

Пусть заданы два числа: $a = \overline{a_1a_2 \ldots a_k},\ b = \overline{b_1b_2 \ldots b_k}$. Тогда $a > b \Leftrightarrow \exists i: \ \forall j < i \ a_j = b_j \ \wedge \ a_i = b_i$. Отсюда получаем необходимое условие получения максимального числа при перестановке в записи числа $a$ групп цифр $\overline{a_ia_{i+1} \ldots a_l}$ и $\overline{a_ja_{j+1} \ldots a_m} \ l<j$ местами: $i = \min_{1 < s < k} s: \ \exists t>s: \ a_t \gt a_s$. Если такое $i$ существует, то далее мы делаем перебор по всем возможным перестановкам, таким что первая группа чисел начинается с индекса $i$ и таким образом находим максимально возможное число. В противном случае данное число уже является максимальным.

Равенство ссылок и интернирование строкReference equality and string interning

Ни один из примеров не использовал ReferenceEquals.None of the samples have used ReferenceEquals. Этот метод определяет, являются ли две строки одним и тем же объектом, что может привести к несогласованности результатов при сравнении строк.This method determines if two strings are the same object, which can lead to inconsistent results in string comparisons. Следующий пример демонстрирует функцию интернирования строк в C#.The following example demonstrates the string interning feature of C#. При объявлении программой двух или более идентичных переменных строк компилятор сохраняет их в одном расположении.When a program declares two or more identical string variables, the compiler stores them all in the same location. Вызвав метод ReferenceEquals, можно увидеть, что две строки фактически ссылаются на один и тот же объект в памяти.By calling the ReferenceEquals method, you can see that the two strings actually refer to the same object in memory. Чтобы избежать интернирования, используйте метод String.Copy.Use the String.Copy method to avoid interning. После копирования две строки имеют разное расположение хранения, хотя и имеют одинаковое значение.After the copy has been made, the two strings have different storage locations, even though they have the same value. Запустите следующий пример, показывающий, что строки и интернированы, находятся в одном хранилище.Run the following sample to show that strings and are interned meaning they share the same storage. Строки и таковыми не являются.The strings and are not.

Примечание

При проверке строк на равенство нужно использовать методы, которые явно указывают, какой вид сравнения следует выполнить.When you test for equality of strings, you should use the methods that explicitly specify what kind of comparison you intend to perform. Это делает код намного более понятным и удобочитаемым.Your code is much more maintainable and readable. Используйте перегрузки методов классов System.String и System.Array, которые принимают параметр перечисления StringComparison.Use the overloads of the methods of the System.String and System.Array classes that take a StringComparison enumeration parameter. Это позволяет указать тип выполняемого сравнения.You specify which type of comparison to perform. Старайтесь избегать использования операторов и при проверке на равенство.Avoid using the and operators when you test for equality. Методы экземпляра String.CompareTo всегда выполняют порядковое сравнение с учетом регистра.The String.CompareTo instance methods always perform an ordinal case-sensitive comparison. Они предназначены, прежде всего, для упорядочивания строк в алфавитном порядке.They are primarily suited for ordering strings alphabetically.

Вы можете интернировать строку или получить ссылку на существующую интернированную строку, вызвав метод String.Intern.You can intern a string or retrieve a reference to an existing interned string by calling the String.Intern method. Чтобы определить, является ли строка интернированной, вызовите метод String.IsInterned.To determine whether a string is interned, call the String.IsInterned method.

СравнениеCompare

Статический метод String.Compare позволяет тщательно сравнивать две строки.The static String.Compare method provides a thorough way of comparing two strings. Этот метод учитывает язык и региональные параметры.This method is culturally aware. Эту функцию можно использовать для сравнения двух строк или подстрок двух строк.You can use this function to compare two strings or substrings of two strings. Кроме того, имеются перегруженные методы, которые учитывают или не учитывают регистр и вариативность языка и региональных параметров.Additionally, overloads are provided that regard or disregard case and cultural variance. В таблице ниже приведены три целочисленных значения, которые может возвращать этот метод.The following table shows the three integer values that this method might return.

Возвращаемое значениеReturn value УсловиеCondition
Отрицательное целое числоA negative integer Первая строка предшествует второй в порядке сортировки.The first string precedes the second string in the sort order.-или—or-Первая строка имеет значение .The first string is .
Первая и вторая строка равны.The first string and the second string are equal.-или—or-Обе строки имеют значение .Both strings are .
Положительное целое числоA positive integer-или—or-11 Первая строка следует за второй в порядке сортировки.The first string follows the second string in the sort order.-или—or-Вторая строка имеет значение .The second string is .

Важно!

Метод String.Compare в основном предназначен для использования при упорядочивании или сортировке строк.The String.Compare method is primarily intended for use when ordering or sorting strings. Не следует использовать метод String.Compare для проверки на равенство (то есть для явного поиска возвращаемого значения 0 без учета того, является ли одна строка меньше или больше другой).You should not use the String.Compare method to test for equality (that is, to explicitly look for a return value of 0 with no regard for whether one string is less than or greater than the other). Для определения равенства двух строк используйте метод .Instead, to determine whether two strings are equal, use the method.

В примере ниже метод String.Compare используется для определения относительных значений двух строк.The following example uses the String.Compare method to determine the relative values of two strings.

Этот пример выводит на консоль значение .This example displays to the console.

В предыдущем примере по умолчанию учитывается язык и региональные параметры.The preceding example is culture-sensitive by default. Для сравнения строк без учета языка и региональных параметров используйте перегрузку метода String.Compare , которая позволяет указать язык и региональные параметры с помощью параметра culture .To perform a culture-insensitive string comparison, use an overload of the String.Compare method that allows you to specify the culture to use by supplying a culture parameter. Пример, демонстрирующий использование метода String.Compare для сравнения без учета языка и региональных параметров, см. в разделе Сравнение строк без учета языка и региональных параметров.For an example that demonstrates how to use the String.Compare method to perform a culture-insensitive comparison, see Performing Culture-Insensitive String Comparisons.

Текст: Пример

Текст 1: Это была темная и бурная ночь. Я сидел один на красном стуле. Я не был полностью одинок, поскольку у меня было три кошки.

Текст 20: Это была мрачная и бурная ночь. Я сидел один на малом кресле. Я не был полностью одинок, так как у меня было три кошачьих // Должен забить верхнюю точку, но не 1

Текст 21: Это была темная и бурная ночь. Я был одинок, сидя на малиновой кафедре. Я не был полностью одинок, так как у меня было три кошачьих // Должен набрать меньше, чем текст 20

Текст 22: Я был одинок, сидя на малиновой кафедре. Я был не совсем одинок, так как у меня было три кошачьих. Это была мрачная и бурная ночь. // Должен оценивать меньше, чем текст 21, но НЕ 0

Выборка значений из таблицы по условию в Excel без ВПР

Пример 2. В таблице содержатся данные о продажах мобильных телефонов (наименование и стоимость). Определить самый продаваемый вид товара за день, рассчитать количество проданных единиц и общую выручку от их продажи.


Вид таблицы данных:

Поскольку товар имеет фиксированную стоимость, для определения самого продаваемого смартфона можно использовать встроенную функцию МОДА. Чтобы найти наименование наиболее продаваемого товара используем следующую запись:

Пояснения:

Функция мода определяет наиболее часто повторяющиеся числовые данные в диапазоне цен. Функция ПОИСКПОЗ находит позицию первой ячейки из диапазона, в которой содержится цена самого популярного товара. Полученное значение выступает в качестве первого аргумента функции адрес, возвращающей ссылку на искомую ячейку (к значению прибавлено число 2, поскольку отсчет начинается с третьей строки сверху). Функция ДВССЫЛ возвращает значение, хранящееся в ячейке по ее адресу.

В результате расчетов получим:

Для определения общей прибыли от продаж iPhone 5s используем следующую запись:

Функция СУММПРИЗВ используется для расчета произведений каждого из элементов массивов, переданных в качестве первого и второго аргументов соответственно. Каждый раз, когда функция СОВПАД находит точное совпадение, значение ИСТИНА будет прямо преобразовано в число 1 (благодаря двойному отрицанию «—») с последующим умножением на значение из смежного столбца (стоимость).

Результат расчетов формулы:

Порядковые сравнения без учета регистраCase-insensitive ordinal comparisons

Метод позволяет указать значение StringComparison для объекта The method enables you to specify a StringComparison value of для порядкового сравнения без учета регистра.for a case-insensitive ordinal comparison. Также имеется статический метод , позволяющий проводить порядковое сравнение без учета регистра, если указать значение для аргумента StringComparison.There is also a static method that performs a case-insensitive ordinal comparison if you specify a value of for the StringComparison argument. Это показано в следующем коде:These are shown in the following code:

При выполнении порядкового сравнения без учета регистра эти методы используют соглашения о регистре для .When performing a case-insensitive ordinal comparison, these methods use the casing conventions of the .

IndexOf и LastIndexOfIndexOf and LastIndexOf

С помощью метода String.IndexOf можно определить позицию первого вхождения конкретного символа в строку.You can use the String.IndexOf method to determine the position of the first occurrence of a particular character within a string. Этот метод учитывает регистр и начинает отсчет с начала строки. Он возвращает позицию переданного символа, используя отсчитываемый от нуля индекс.This case-sensitive method starts counting from the beginning of a string and returns the position of a passed character using a zero-based index. Если символ не удается найти, возвращается значение –1.If the character cannot be found, a value of –1 is returned.

В примере ниже метод IndexOf используется для поиска первого вхождения символа «» в строку.The following example uses the IndexOf method to search for the first occurrence of the » character in a string.

Этот пример выводит на консоль значение .This example displays to the console.

Метод String.LastIndexOf аналогичен методу String.IndexOf за исключением того, что он возвращает позицию последнего вхождения конкретного символа в строку.The String.LastIndexOf method is similar to the String.IndexOf method except that it returns the position of the last occurrence of a particular character within a string. Он учитывает регистр и использует отсчитываемый от нуля индекс.It is case-sensitive and uses a zero-based index.

В примере ниже метод LastIndexOf используется для поиска последнего вхождения символа «» в строку.The following example uses the LastIndexOf method to search for the last occurrence of the » character in a string.

Этот пример выводит на консоль значение .This example displays to the console.

Оба метода полезно использовать в сочетании с методом String.Remove .Both methods are useful when used in conjunction with the String.Remove method. Для получения позиции символа используется метод IndexOf или LastIndexOf , после чего эта позиция передается методу Remove для удаления символа или начинающегося с него слова.You can use either the IndexOf or LastIndexOf methods to retrieve the position of a character, and then supply that position to the Remove method in order to remove a character or a word that begins with that character.

Новый базовый оператор упорядочения:

operator<=>memcmpstrcmp basic_string::compare()intint

  • strong_ordering: отношение линейного порядка, при котором равенство подразумевает взаимозаменяемость элементов (т.е. (a <=> b) == strong_ordering::equal подразумевает, что для всех подходящих функций f имеет место f(a) == f(b). Термину «подходящая функция» намеренно не даётся чёткого определения, но к таковым не относятся функции, которые возвращают адреса своих аргументов или capacity() вектора и т.п. Нас интересуют только «существенные» свойства, что тоже очень расплывчато, но можно условно считать, что речь идёт о значении типа. Значение вектора — это содержащиеся в нём элементы, но не его адрес и т.п.). Эта категория включает в себя следующие значения: strong_ordering::greater, strong_ordering::equal и strong_ordering::less.
  • weak_ordering: отношение линейного порядка, при котором равенство определяет лишь некоторый класс эквивалентности. Классический пример — нечувствительное к регистру сравнение строк, когда два объекта могут быть weak_ordering::equivalent, но не равны в строгом смысле (этим объясняется замена слова equal на equivalent в имени значения).
  • partial_ordering: отношение частичного порядка. В этой категории к значениям greater, equivalent и less (как в weak_ordering) добавляется ещё одно — unordered («неупорядоченно»). С его помощью можно выражать отношения частичного порядка в системе типов: 1.f <=> NaN даёт значение partial_ordering::unordered.

strong_ordering2 <=> 4 strong_ordering::less3 <=> -1 strong_ordering::greaterstrong_ordering weak_orderingstrong_ordering::equal weak_ordering::equivalentintint

a @ b (a <=> b) @ 0 2 < 4 (2 <=> 4) < 0strong_ordering::less < 0 true<=> <a <= b (a <=> b) <= 0 a <=> b partial_ordered::unorderedpartial_ordered::unordered <= 0 false<=> partial_ordering bool true falseintstd::optional

<= <=>

P0515operator<=>.


С этим читают