##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::collate

From cppreference.com
< cpp‎ | locale

Defined in header `<locale>` |  |
template< class CharT > class collate; |  |

Class std::collate encapsulates locale-specific collation (comparison) and hashing of strings. This facet is used by std::basic_regex and can be applied, by means of std::locale::operator(), directly to all standard algorithms that expect a string comparison predicate.

Inheritance diagram

Two standalone (locale-independent) specializations are provided by the standard library:

Defined in header `<locale>`
std::collate<char> | implements lexicographical ordering of byte strings
std::collate<wchar_t> | implements lexicographical ordering of wide strings

In addition, every locale object constructed in a C++ program implements its own (locale-specific) versions of these specializations.

### [edit] Member types

Member type | Definition
`char_type` | `CharT`
`string_type` | `std::basic_string<CharT>`

### [edit] Member functions

(constructor) | constructs a new collate facet (public member function)
(destructor) | destructs a collate facet (protected member function)
compare | invokes `do_compare` (public member function) [edit]
transform | invokes `do_transform` (public member function) [edit]
hash | invokes `do_hash` (public member function) [edit]

### [edit] Member objects

static std::locale::id id | id of the locale (public member object)

### [edit] Protected member functions

do_compare [virtual] | compares two strings using this facet's collation rules (virtual protected member function) [edit]
do_transform [virtual] | transforms a string so that collation can be replaced by comparison (virtual protected member function) [edit]
do_hash [virtual] | generates an integer hash value using this facet's collation rules (virtual protected member function) [edit]

### [edit] Example

Run this code

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

    int main()
    {
        std::wcout.imbue(std::locale(""));
        std::vector<std::wstring> v = {L"ar", L"zebra", L"\u00f6grupp", L"Zebra", L"\u00e4ngel",
                                       L"\u00e5r", L"f\u00f6rnamn"};

        std::wcout << "Default locale collation order: ";
        std::sort(v.begin(), v.end());
        for (auto s : v) std::wcout << s << ' '; std::wcout << '\n';

        std::wcout << "English locale collation order: ";
        std::sort(v.begin(), v.end(), std::locale("en_US.UTF-8"));
        for (auto s : v) std::wcout << s << ' '; std::wcout << '\n';

        std::wcout << "Swedish locale collation order: ";
        std::sort(v.begin(), v.end(), std::locale("sv_SE.UTF-8"));
        for (auto s : v) std::wcout << s << ' '; std::wcout << '\n';
    }

Output:

    Default locale collation order: Zebra ar förnamn zebra ängel år ögrupp
    English locale collation order: ängel ar år förnamn ögrupp zebra Zebra
    Swedish locale collation order: ar förnamn zebra Zebra år ängel ögrupp

### [edit] See also

operator() | lexicographically compares two strings using this locale's collate facet (public member function of `std::locale`) [edit]
collate_byname | creates a collate facet for the named locale (class template)

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/locale/collate&oldid=65764"