Использование оператора меньше, чем сравнения для строк
Я следую учебному курсу для С++ и смотрю на строки и перегружает с операторами, такими как + =, ==,!= и т.д., в настоящее время имеет простой оператор if
if(s1 < s2)
cout << s2 <<endl;
else
if(s2 < s1)
cout << s1 << endl;
else
cout << "Equal\n";
но как это работает, и как программа определяет, какая строка больше другой?
Оглядываясь вокруг, я нашел базовое объявление шаблона:
template<class charT, class traits, class Allocator>
bool operator< ( const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs );
определяет, как < работает? если да, то что означает /do?
также могут ли следующие операторы иметь какое-либо значение для строк? - = и * =
любой совет приветствуется!
Ответы
Ответ 1
Менее чем оператор в строках делает лексикографическое сравнение строк. Это сравнивает строки так же, как они будут перечислены в порядке словаря, обобщенные для работы с строками с небуквенными символами.
Например:
"a" < "b"
"a" < "ab"
"A" < "a" (Since A has ASCII value 65; a has a higher ASCII value)
"cat" < "caterpillar"
Для получения дополнительной информации см. алгоритм std::lexicographical_compare
, который обычно вызывает оператор меньшего размера.
Что касается -=
и *=
, ни один из этих операторов не определен в строках. Единственными "арифметическими" операторами являются +
и +=
, которые выполняют конкатенацию строк.
Надеюсь, это поможет!
Ответ 2
Операторы сравнения реализуют лексикографическое упорядочение строк.
-=
и *=
для строк не определены.