std::collate(3) | C++ Standard Libary | std::collate(3) |
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
Specializations¶
The standard library is guaranteed to provide the following
specializations (they
are required to be implemented by any locale object):
Defined in header <locale>
std::collate<char> implements lexicographical ordering of byte strings
std::collate<wchar_t> implements lexicographical ordering of wide
strings
Member types¶
Member type Definition
char_type CharT
string_type std::basic_string<CharT>
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)
transform invokes do_transform
(public member function)
hash invokes do_hash
(public member function)
Member objects¶
static std::locale::id id id of the locale
(public member object)
Protected member functions¶
do_compare compares two strings using this facet's collation
rules
[virtual] (virtual protected member function)
do_transform transforms a string so that collation can be replaced by
comparison
[virtual] (virtual protected member function)
do_hash generates an integer hash value using this facet's collation rules
[virtual] (virtual protected member function)
Example¶
// Run this code
#include <algorithm>
#include <iostream>
#include <locale>
#include <string>
#include <vector>
int main()
{
std::locale::global(std::locale("en_US.utf8"));
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
operator() facet
(public member function of std::locale)
collate_byname represents the system-supplied std::collate for the named
locale
(class template)
2024.06.10 | http://cppreference.com |