std::locale::operator() (3) - Linux Manuals

std::locale::operator(): std::locale::operator()


std::locale::operator() - std::locale::operator()


template< class CharT, class Traits, class Alloc >
bool operator()( const basic_string<CharT,Traits,Alloc>& s1,
const basic_string<CharT,Traits,Alloc>& s2) const;

Compares two string arguments s1 and s2 according to the lexicographic comparison rules defined by this locale's std::collate<charT> facet. This operator allows any locale object that has a collate facet to be used as a binary predicate in the standard algorithms (such as std::sort) and ordered containers (such as std::set)


s1 - the first string to compare
s2 - the second string to compare

Return value

true if s1 is lexicographically less than s2, false otherwise.

Possible implementation

  template<class CharT, class Traits, class Alloc >
  bool operator()(const std::basic_string<CharT,Traits,Alloc>& s1,
                  const std::basic_string<CharT,Traits,Alloc>& s2) const;
      return std::use_facet<std::collate<CharT>>(*this).compare(
                                 , + s1.size(),
                                 , + s2.size() ) < 0;


A vector of strings can be sorted according to a non-default locale by using the locale object as comparator:
// Run this code

  #include <locale>
  #include <algorithm>
  #include <vector>
  #include <string>
  #include <cassert>

  int main()
      std::vector<std::wstring> v = {L"жил", L"был", L"кот"};
      std::sort(v.begin(), v.end(), std::locale("ru_RU.UTF8"));
      assert(v[0] == L"был");
      assert(v[1] == L"жил");
      assert(v[2] == L"кот");

See also

        defines lexicographical comparison and hashing of strings
collate (class template)