Слабый порядок в C++
Эквивалентность без равенства допускает std::weak_ordering, когда разные исходные значения после нормализации считаются эквивалентными для сравнения.
Буквы в одном регистре можно привести
к общему виду через std::tolower
из <cctype>. Запишем Glyph
с одним символом и сравним 'A'
с 'a':
#include <cctype>
#include <compare>
#include <iostream>
struct Glyph {
char letter;
std::weak_ordering operator<=>(const Glyph& other) const {
unsigned char left = static_cast<unsigned char>(letter);
unsigned char right = static_cast<unsigned char>(other.letter);
return std::tolower(left) <=> std::tolower(right);
}
};
int main() {
Glyph upper{'A'};
Glyph lower{'a'};
std::cout << (upper == lower) << "\n";
return 0;
}
Объявите struct KeyChar с полем
char ch и operator<=>,
возвращающим std::weak_ordering
после std::tolower. Выведите
результат == для 'Z'
и 'z'.
Сравните 'b' и 'C' через <
при том же правиле и выведите результат.