std::collate<CharT>:: compare, std::collate<CharT>:: do_compare
|
Definiert im Header
<locale>
|
||
|
public
:
int
compare
(
const
CharT
*
low1,
const
CharT
*
high1,
|
(1) | |
|
protected
:
virtual
int
do_compare
(
const
CharT
*
low1,
const
CharT
*
high1,
|
(2) | |
do_compare
der am meisten abgeleiteten Klasse auf.
[
low1
,
high1
)
mit der Zeichenfolge
[
low2
,
high2
)
unter Verwendung der Kollationsregeln dieses Locales und gibt
1
zurück, wenn die erste Zeichenfolge der zweiten folgt,
-
1
wenn die erste Zeichenfolge der zweiten vorausgeht, und Null wenn die beiden Zeichenfolgen äquivalent sind.
Inhaltsverzeichnis |
Parameter
| low1 | - | Zeiger auf das erste Zeichen der ersten Zeichenkette |
| high1 | - | Zeiger auf das Ende (exklusiv) der ersten Zeichenkette |
| low2 | - | Zeiger auf das erste Zeichen der zweiten Zeichenkette |
| high2 | - | Zeiger auf das Ende (exklusiv) der zweiten Zeichenkette |
Rückgabewert
1 wenn die erste Zeichenkette größer als die zweite ist (d.h. der zweiten in der Sortierreihenfolge folgt), - 1 wenn die erste Zeichenkette kleiner als die zweite ist (der zweiten in der Sortierreihenfolge vorausgeht), null wenn die beiden Zeichenketten äquivalent sind.
Hinweise
Wenn ein Dreivergleich nicht erforderlich ist (wie bei der Übergabe eines
Compare
Arguments an Standardalgorithmen wie
std::sort
),
kann
std::locale::operator()
geeigneter sein.
Die Sortierreihenfolge ist die Wörterbuchreihenfolge: Die Position des Buchstabens im nationalen Alphabet (seine Äquivalenzklasse ) hat höhere Priorität als seine Groß-/Kleinschreibung oder Variante. Innerhalb einer Äquivalenzklasse werden Kleinbuchstaben vor ihren Großbuchstaben-Äquivalenten sortiert, und die sprachspezifische Reihenfolge kann für Zeichen mit diakritischen Zeichen gelten. In einigen Gebietsschemata vergleichen Zeichengruppen als einzelne Sortiereinheiten . Zum Beispiel folgt "ch" im Tschechischen auf "h" und geht vor "i" , und "dzs" im Ungarischen folgt auf "dz" und geht vor "g" .
Beispiel
#include <iostream> #include <locale> #include <string> template<typename CharT> void try_compare(const std::locale& l, const CharT* p1, const CharT* p2) { auto& f = std::use_facet<std::collate<CharT>>(l); std::basic_string<CharT> s1(p1), s2(p2); if (f.compare(&s1[0], &s1[0] + s1.size(), &s2[0], &s2[0] + s2.size()) < 0) std::wcout << p1 << " before " << p2 << '\n'; else std::wcout << p2 << " before " << p1 << '\n'; } int main() { std::locale::global(std::locale("en_US.utf8")); std::wcout.imbue(std::locale()); std::wcout << "In the American locale: "; try_compare(std::locale(), "hrnec", "chrt"); std::wcout << "In the Czech locale: "; try_compare(std::locale("cs_CZ.utf8"), "hrnec", "chrt"); std::wcout << "In the American locale: "; try_compare(std::locale(), L"år", L"ängel"); std::wcout << "In the Swedish locale: "; try_compare(std::locale("sv_SE.utf8"), L"år", L"ängel"); }
Ausgabe:
In the American locale: chrt before hrnec In the Czech locale: hrnec before chrt In the American locale: ängel before år In the Swedish locale: år before ängel
Siehe auch
|
vergleicht zwei Zeichenketten gemäß der aktuellen Locale
(Funktion) |
|
|
vergleicht zwei Wide-Strings gemäß der aktuellen Locale
(Funktion) |
|
|
vergleicht zwei Zeichenketten lexikografisch unter Verwendung des Collate-Facets dieser Locale
(öffentliche Elementfunktion von
std::locale
)
|