Sortieren von C ++ - Vektoren

Sortieren von C ++ - Vektoren
Der C ++ - Vector ist wie ein Array mit Mitgliedsfunktionen (Methoden). Die Länge des Vektors kann erhöht oder in der Programmausführung verringert werden. Der Vektor hat viele Mitgliederfunktionen. Unter all diesen Mitgliedsfunktionen nicht sortiert der Vektor. C ++ verfügt jedoch über eine Bibliothek namens Algorithmus Library. Diese Bibliothek hat viele allgemeine algorithmische Funktionen. Eine davon ist die Sort () -Funktion. Diese Funktion kann verwendet werden, um C ++ - Container wie den Vektor zu sortieren. Alle Werte eines Vektors sind Werte desselben Typs.

Ein Programmierer kann seine eigene Sort () -Funktion schreiben. Die Funktion "sort () aus der Algorithmus -Bibliothek ist jedoch wahrscheinlich besser als das, was der gewöhnliche Programmierer schreibt.

Die Funktion "sort () kann die Werte eines Vektors in aufsteigender Reihenfolge sortieren oder in absteigender Reihenfolge. Um einen Vektor zu sortieren, muss die Algorithmus -Bibliothek enthalten sein. Die Vektorbibliothek muss auch enthalten sein. Der Beginn des Programms sollte so etwas sein wie:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;

Der Vektor ist eigentlich eine Klasse, aus der Vektorobjekte erstellt werden können. Mit dem oben genannten Top-Abschnitt des Programms kann ein Vektor wie folgt erstellt werden:

Vektor vtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';

Der Name der Klasse ist ein Vektor. Der Name des sofortigen Objekts ist VTR.

In diesem Tutorial erfolgt die Sortierkodierung in der Funktion c ++ main (). In diesem Tutorial wird erläutert, wie ein C ++ - Vektor mit dem obigen Vektor VTR sortiert wird.

Artikelinhalt

  • Standard-Sortierung
  • In absteigender Reihenfolge sortieren
  • Benutzerdefinierte Vergleichenfunktion
  • Andere Datentypen
  • Abschluss

Standard-Sortierung

Standardsortierarten in aufsteigender Reihenfolge. Die Syntax dafür ist:

Vorlage
void Sortierung (RandomAccessiterator zuerst, RandomAccessiterator zuletzt);

Sortieren des gesamten Vektors

Der folgende Code sortiert den gesamten Vektor:

sortieren (vtr.begin (), vtr.Ende());
für (int i = 0; iCout<Cout<Die ungeortierte Liste lautet:

Z, X, C, V, B, N, M, A, S, D

Die sortierte Liste lautet:

A, B, C, D, M, N, S, V, X, Z,

welches ist richtig. Wenn die Sortierung nicht korrekt ist, ist der Fehler der des Programmierers und nicht die der Sort () -Funktion.

Der RandomAccessionSiterator ist intrinsisch. vtr.begin () gibt einen Iterator zurück, der auf das erste Element verweist, und VTR.End () gibt einen weiteren Iterator desselben Typs zurück, der kurz nach dem letzten Element zeigt. Es ist also nicht erforderlich, einen Vektor zu instanziieren, der einen zufälligen Accessiterator angibt. Auf diese Weise ist die gesamte Liste sortiert.

Sortieren eines Bereichs in aufsteigender Reihenfolge

Die obige unsortierte Liste hat zehn Elemente mit Indizes:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

So sortieren Sie nur die Elemente aus Position 4, dh Index, 3 = 4 - 1, zu Position 9, der Index, 8 = 9 - 1, 3 zu VTR hinzufügen.Begin (), um den ersten Iterator zu haben, und dann 8 zu VTR hinzuzufügen.begin () den letzten Iterator für die Sort () -Funktion haben. Die 9th Das Element des Index 8 wird nicht in die Sortierung einbezogen. Das heißt, das letzte Element, das im gewählten Bereich angegeben ist, ist für die Sortierung ausgeschlossen. Der folgende Code zeigt dies:

sortieren (vtr.begin () + 3, vtr.begin () + 8);
für (int i = 0; iCout<Cout<Die ungeortierte Liste lautet:

Z, X, C, V, B, N, M, A, S, D
[/c] c
Die sortierte Liste lautet:
[CC Lang = "Text" width = "100%" Height = "100%" entkommen = "True" thema = "Blackboard" nowrap = "0"]
Z, X, C, A, B, M, N, V, S, D,

Die Elemente an den Positionen 4, 5, 6, 7, 8 wurden sortiert. Das Element am 9th Die Position wurde nicht in die Sorte aufgenommen. Diese Positionen entsprechen den Indizes 3, 4, 5, 6, 7. Das Element bei Index 8 wurde nicht in die Sortierung aufgenommen.

Um einen Bereich zu sortieren, identifizieren Sie die ersten und letzten Elemente im Bereich, nicht unbedingt der gesamten Liste. Fügen Sie den Index des ersten Elements dem Iterator mit Beginn () hinzu. Fügen Sie den Index des letzten Elements hinzu, immer noch dem Iterator von Beginn (). Denken Sie daran, dass das letzte Element für den Bereich nicht in die Sortierung aufgenommen wird, sondern das erste Element für den Bereich enthalten ist.

Das Hinzufügen eines Index zu einem Iterator ist möglich, da das Hinzufügen einer Zahl mit dem Inkrementieren des Iterators die gleiche Anzahl von Zeiten entspricht. Das Inkrementieren eines Iterators macht es einmal zum nächsten Element zu einem Punkt.

In absteigender Reihenfolge sortieren

Die Syntax ist:

Vorlage
void sortieren (randomaccessiterator zuerst, randomAccessiterator letztes, vergleichen comp);

Dies unterscheidet sich von der obigen Syntax mit dem Vorhandensein von „Compare comp“. Comp ist ein Funktionszeiger oder ein Funktionsobjekt. comp entscheidet tatsächlich, ob die Sortierung aufsteigend oder absteigend sein sollte. Seine Abwesenheit ist der Standardfall, was bedeutet, absteig zu werden.

Sortieren der gesamten Liste in absteigender Reihenfolge

Der folgende Code sortiert den gesamten Vektor in absteigender Reihenfolge:

sortieren (vtr.begin (), vtr.End (), größer());
für (int i = 0; iCout<Cout<Die ungeortierte Liste lautet:

Z, X, C, V, B, N, M, A, S, D

Der in absteigende Reihenfolge sortierte Vektor ist:

Z, x, v, s, n, m, d, c, b, a,

Beachten Sie die Verwendung von „Greater ()“ an der Stelle von Comp.

Das Gegenteil von Greater () ist weniger (), das ist der Standard (aufsteigend) und muss nicht getippt werden.

Sortieren eines Bereichs in absteigender Reihenfolge

Ein Bereich kann sowohl in absteigender Reihenfolge als auch in aufsteigender Reihenfolge sortiert werden. Der folgende Code sortiert die 4th zum 9th Element ohne Einbeziehung der 9th Element; und absteigend.

sortieren (vtr.begin () + 3, vtr.begin () + 8, größer());
für (int i = 0; iCout<Cout<Die ungeortierte Liste lautet:

Z, X, C, V, B, N, M, A, S, D

Der Vektor mit seiner gewählten Reichweite, die in absteigender Reihenfolge sortiert ist, ist:

Z, X, C, V, N, M, B, A, S, D,

Benutzerdefinierte Vergleichenfunktion

Das folgende Programm hat eine benutzerdefinierte Vergleichenfunktion für die Aufstiegsart:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool Compare (char a, char b)
Rückkehr (a < b);

int main ()

sortieren (vtr.begin (), vtr.End (), vergleichen);
für (int i = 0; iCout<Cout<Rückkehr 0;

Die Funktion zum Vergleich wird als Vergleich bezeichnet. Es gibt einen Bool zurück. Es verfügt über zwei Parameter A und B vom gleichen Typ wie der Vektorelementtyp. Es kehrt wahr zurück, wenn A kleiner als B und ansonsten falsch ist. Der Name dieser Funktion ist das dritte Argument des Sort () -Funktionsaufrufs. In diesem Programm ist Compare das gleiche wie weniger (). Einige andere Namen anstatt zu vergleichen, können verwendet werden.

Die ungeortierte Liste lautet:

Z, X, C, V, B, N, M, A, S, D

Die sortierte Liste lautet:

A, B, C, D, M, N, S, V, X, Z,

Natürlich kann die benutzerdefinierte Vergleichenfunktion für einen Bereich verwendet werden. Das folgende Programm zeigt dies:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool Compare (char a, char b)
Rückkehr (a < b);

int main ()

sortieren (vtr.begin () + 3, vtr.begin () + 8, vergleichen);
für (int i = 0; iCout<Cout<Rückkehr 0;

Die ungeortierte Liste lautet:

Z, X, C, V, B, N, M, A, S, D

Die sortierte Liste lautet:

Z, X, C, A, B, M, N, V, S, D,

Die Vergleichsfunktion kann zum Abstieg codiert werden. Das folgende Programm zeigt dies:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool Compare (char a, char b)
return (a> b);

int main ()

sortieren (vtr.begin (), vtr.End (), vergleichen);
für (int i = 0; iCout<Cout<Rückkehr 0;

Einfach ändern (a b).

Die ungeortierte Liste lautet:

Z, X, C, V, B, N, M, A, S, D

Die sortierte Liste lautet:

Z, x, v, s, n, m, d, c, b, a,

Die benutzerdefinierte Vergleichsfunktion kann für einen Bereich in absteigender Reihenfolge verwendet werden. Das folgende Programm zeigt dies:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
vectorvtr = 'z', 'x', 'c', 'v', 'b', 'n', 'm', 'a', 's', 'd';
bool Compare (char a, char b)
return (a> b);

int main ()

sortieren (vtr.begin ()+3, vtr.begin ()+8, vergleichen);
für (int i = 0; iCout<Cout<Rückkehr 0;

Die ungeortierte Liste lautet:

Z, X, C, V, B, N, M, A, S, D

Der Vektor mit seiner gewählten Reichweite, die in absteigender Reihenfolge sortiert ist, ist:

Z, X, C, V, N, M, B, A, S, D,

Andere Datentypen

Andere Datentypen können mit ihren Typen sortiert werden. Wenn der int -Datentyp beispielsweise sortiert werden soll. Wenn sich der Datentyp in einer Bibliothek befindet, muss der Bibliotheksheader wie für den Fall der folgenden Zeichenfolge in das Programm aufgenommen werden:

#enthalten
#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
vectorvtr = "ze", "xe", "ce", "ve", "be", "ne", "me", "ae", "se", "de";
int main ()

sortieren (vtr.begin (), vtr.End (), Greater ());
für (int i = 0; iCout<Cout<Rückkehr 0;

Die ungeortierte Liste lautet:

Ze, xe, ce, ve, be, ne, me, ae, se, de

Die sortierte Liste lautet:

Ze, xe, ve, se, ne, me, de, ce, be, ae,

Abschluss

C ++ wird mit der Algorithmus -Bibliothek geliefert, die eine Sort () -Funktion hat. Diese Funktion nimmt zwei oder drei Argumente in ihrer normalen Verwendung vor. Das erste Argument ist, wenn die Vektorliste beginnen sollte, sollte die Art beginnen. Das zweite Argument ist, wenn die Vektorliste enden sollte. Das dritte Argument bestimmt, ob die Sortierung in aufsteigender Reihenfolge oder in absteigender Reihenfolge erfolgen soll.