Usando el operador menor que el de comparación para cadenas

Estoy siguiendo un tutorial para C ++ y observando cadenas y sobrecargas con operadores como + =, ==,! = Etc, actualmente tengo una instrucción if simple

if(s1 < s2)
    cout << s2 <<endl;
else
  if(s2 < s1)
    cout << s1 << endl;
  else
    cout << "Equal\n";

pero, ¿cómo funciona esto y cómo el programa decide qué cadena es mayor que otra? Mirando alrededor he encontrado una plantilla básica de decleración:

template<class charT, class traits, class Allocator>
  bool operator< ( const basic_string<charT,traits,Allocator>& lhs,
                const basic_string<charT,traits,Allocator>& rhs );

¿Esto define cómo <funciona? Si es así, ¿qué significa / hacer?

¿También los siguientes operadores tienen algún significado para las cadenas? - = y * =

¡Cualquier consejo es muy apreciado!

Respuestas a la pregunta(2)

Su respuesta a la pregunta