Эта функция проверяет, что число сопоставимо.
Это может быть очень важно для значений, используемых в качестве ключа для функции сортировки или для поиска. Сравнение, используемое в сортировке, предполагает, что если A
Технически то, что требуется для сортировки, называется строгим слабым порядком .
Элемент в коллекции, имеющий несопоставимое значение, не найден. Список, который содержит несопоставимое значение, является несортируемым. Кроме того, оптимизированная реализация может выйти из сортируемого массива и начать повреждение памяти или может никогда не завершиться.
Единственное несопоставимое значение, которое я знаю для двойного числа, - это NaN. Как уже отмечали другие, NaN вернет false, если используется как параметр для whatIsIt()
. Если NaN является возможным значением для чисел, которые вы сравниваете, то вам придется с этим справиться, иначе могут произойти плохие вещи.
Проблемы с std :: map и NaN упомянуты в этой статье в википедии.
Вы можете построить сравнение для сортировки NaN по заданному месту в списке, но вы не можете сделать это только с помощью встроенных операторов. Вместо этого вы бы сделали что-то вроде
if ( A < B ) then return -1;
else if ( B < A ) then return 1;
else return whatIsIt(A) - whatIsIt(B);
Кроме того, в SQL NULL также нельзя сравнивать в совместимых реализациях.
Загадка в этом заключается в том, почему isnan () не использовался, если это не был вопрос интервью или что-то в этом роде.