operator<

template<class E, class T, class A>
    bool operator<(
        const basic_string<E, T, A>& lhs,
        const basic_string<E, T, A>& rhs);
template<class E, class T, class A>
    bool operator<(
        const basic_string<E, T, A>& lhs,
        const E *rhs);
template<class E, class T, class A>
    bool operator<(
        const E *lhs,
        const basic_string<E, T, A>& rhs);

Each template function overloads operator< to compare two objects of template class basic_string. All effectively return basic_string<E, T, A>(lhs).compare(rhs) < 0.

See the related sample program.