最も一般的なシステムは、ASCIIまたはその派生物を使用します。 ASCIIでは、すべて小文字がすべての大文字の後ろに来るため、'A' < 'Z'
と'a' < 'z'
(以前は予想していない部分)'Z' < 'a'
です。つまり、その順序(その間に散在する)はA..Za..z
です。アルファベット順に並べたとき
は、(明らかにあなたを含む)ほとんどの人は一般的に代わりAaBbCc...Zz
のようなものを好むだろう
我々私たちが望む相対的な順序を指定するテーブルでこれを実装することができ - 。しかし、この要件は、十分なことが一般的ですstd::locale
にはcollate
ファセットが含まれていますが、そのロケールに適した比較を行うためにoperator()
をオーバーロードします。我々は比較演算子としてのロケールを指定する場合に過負荷がstd::sort
によって自動的に使用されますので、我々はこのような何かを行うことができます。
std::sort(cities.begin(), cities.end(), std::locale(""));
「名前のないロケールが」コンピュータが設定されたロケールを選択しますしたがって、通常はかなり節約されます。フランス語を扱っているようですが、アクセントや墓などの手紙もあります。ロケールはに正しく分類する方法も知っているはずです。
特定のロケールのソートを指定する必要がある場合(ユーザーのコンピュータの設定方法に関係なく)、ソートを指定することもできます。私は私のコンピュータは、米国英語用に設定されているにもかかわらず、フランス系カナダ人の並べ替えを使用したい場合たとえば、私が指定することができます。
std::sort(cities.begin(), cities.end(), std::locale("fr-CA"));
受け入れられる文字列の正確なセットは、コンパイラによって異なります。標準で列挙されているのは "C"(これはあなたが既にデフォルトしているものです)と ""です。実装者は、他者がサポートするものを決定することができます。上記で使用した"fr-CA"
はMicrosoftのコンパイラでサポートされていますが、Linuxでgccを使用している場合(たとえば)、同じ結果を得るには他の文字列を指定する必要があります。
少なくともMicrosoftの現在のコンパイラと、どちらか""
または"fr-CA"
は、あなたがそれらをしたいとこれらの文字列をソートするために行います。これらの文字については
Marseille
Mont de Marsan
Mont Saint Martin
、ほとんど「C」以外のロケールは、おそらく仕事をします。しかし、発音記号がある場合は、正しいロケールが必要になります。
大文字は小文字より小文字です – harold
デフォルトの比較機能と同じくらい比較が終わっても問題はありません。異なる方法でソートする場合は、いつでも独自のものを提供できます。 –
さて、私は理解していると思います。 –