3 Stimmen

Namen mit Zahlen richtig sortieren

Für die Sortierung von Artikelnamen möchte ich Zahlen korrekt unterstützen, d.h. dies:

1 Hamlet
2 Ophelia
...
10 Laertes

anstelle von

1 Hamlet
10 Laertes
2 Ophelia
...

Kennt jemand einen Vergleichsfunktor, der das bereits unterstützt?
(d.h. ein Prädikat, das an std::sort )

Ich habe im Wesentlichen zwei Muster zu unterstützen: Führende Nummer (wie oben) und Nummer am Ende, ähnlich wie beim Explorer:

Dolly
Dolly (2)
Dolly (3)

(Ich schätze, ich könnte das lösen: Vergleich nach Zeichen, und behandeln numerische Werte anders. Allerdings würde das wahrscheinlich brechen unicode collaiton und was nicht)

0 Stimmen

std::sort weiß nichts über Unicode, also werden Sie das nicht kaputt machen. Es ist das Prädikat, das damit richtig umgehen muss. Sie sollten es wahrscheinlich nicht nach Zeichen aufschlüsseln, sondern die Zeichenkette in Token aufteilen und dann die Token sortieren.

0 Stimmen

Ich habe nicht vor, std::sort zu brechen :) Gute Idee, die Segmente zu vergleichen/zusammenzufassen.

5voto

Nick Dandoulakis Punkte 41402

Das nennt man alphanumerische Sortierung.
Sehen Sie sich diesen Link an: Der Alphanum-Algorithmus

0 Stimmen

Danke! Es nicht collate Segmente (eher, vergleichen Sie Char-by-Char), und nicht korrekt mit Zahlen, die unsigned long überschreiten, aber es ist ein guter Drop-in-Ersatz.

0voto

user855 Punkte 17952

Ich denke, Sie können ein Paar Objekt verwenden und dann machen Vektor > und dann diesen Vektor sortieren. Paare werden auf der Grundlage ihrer ersten Elemente verglichen. Auf diese Weise können Sie die gewünschte Sortierung erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X