std::collate (3) - Linux Manuals
std::collate: std::collate
Command to display std::collate
manual in Linux: $ man 3 std::collate
NAME
std::collate - std::collate
Synopsis
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.
std-collate-inheritance.svg
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.
Member types
Member type Definition
char_type CharT
string_type std::basic_string<CharT>
Member functions
constructs a new collate facet
constructor (public member function)
destructs a collate facet
destructor (protected member function)
invokes do_compare
compare (public member function)
invokes do_transform
transform (public member function)
invokes do_hash
hash (public member function)
Member objects
id of the locale
static std::locale::id id (public member object)
Protected member functions
do_compare compares two strings using this facet's collation rules
(virtual protected member function)
[virtual]
do_transform transforms a string so that collation can be replaced by comparison
(virtual protected member function)
[virtual]
do_hash generates an integer hash value using this facet's collation rules
(virtual protected member function)
[virtual]
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
See also
lexicographically compares two strings using this locale's collate facet
operator() (public member function of std::locale)
creates a collate facet for the named locale
collate_byname (class template)
Pages related to std::collate
- std::collate<CharT>::collate (3) - std::collate<CharT>::collate
- std::collate<CharT>::compare,std::collate<CharT>::do_compare (3) - std::collate<CharT>::compare,std::collate<CharT>::do_compare
- std::collate<CharT>::hash,std::collate<CharT>::do_hash (3) - std::collate<CharT>::hash,std::collate<CharT>::do_hash
- std::collate<CharT>::transform,do_transform (3) - std::collate<CharT>::transform,do_transform
- std::collate<CharT>::~collate (3) - std::collate<CharT>::~collate
- std::collate_byname (3) - std::collate_byname
- std::codecvt (3) - std::codecvt
- std::codecvt<InternT,ExternT,State>::always_noconv,do_always_noconv (3) - std::codecvt<InternT,ExternT,State>::always_noconv,do_always_noconv
- std::codecvt<InternT,ExternT,State>::codecvt (3) - std::codecvt<InternT,ExternT,State>::codecvt
- std::codecvt<InternT,ExternT,State>::encoding,do_encoding (3) - std::codecvt<InternT,ExternT,State>::encoding,do_encoding
- std::codecvt<InternT,ExternT,State>::in,std::codecvt<InternT,ExternT,State>::do_in (3) - std::codecvt<InternT,ExternT,State>::in,std::codecvt<InternT,ExternT,State>::do_in