Sortowanie wektorów C ++

Sortowanie wektorów C ++
Wektor C ++ jest jak tablica z funkcjami członkowskimi (metody). Długość wektora może zostać zwiększona lub zmniejszona w wykonaniu programu. Wektor ma wiele funkcji członków. Spośród wszystkich tych funkcji członków, wektor bez Sort. Jednak C ++ ma bibliotekę o nazwie biblioteka algorytmu. Ta biblioteka ma wiele funkcji algorytmicznych ogólnego zastosowania. Jedna z nich jest funkcja sort (). Tę funkcję można użyć do sortowania pojemników C ++, takich jak wektor. Wszystkie wartości wektora są wartościami tego samego typu.

Programista może napisać własną funkcję sort (). Jednak funkcja sort () z biblioteki algorytmu prawdopodobnie będzie działać lepiej niż to, co zapisuje zwykły programista.

Funkcja sort () może sortować wartości wektora w kolejności rosnącej lub w kolejności malejącej. Aby posortować wektor, biblioteka algorytmu musi zostać uwzględniona. Biblioteka wektorowa musi być również uwzględniona. Początek programu powinien być coś takiego:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;

Wektor jest w rzeczywistości klasą, z której można tworzyć obiekty wektorowe. Z powyższą górną częścią programu, wektor, który ma być sortowany, można utworzyć w następujący sposób:

wektor vtr = „z”, „x”, „c”, „v”, „b”, „n”, „m”, „a”, „s”, „d”;

Nazwa klasy to wektor. Nazwa instanowanego obiektu to VTR.

W tym samouczku kodowanie sortowania odbywa się w funkcji C ++ Main (). Ten samouczek wyjaśnia, jak posortować wektor C ++ za pomocą powyższego wektora, VTR.

Treść artykułu

  • Domyślne sortowanie
  • Sortowanie w kolejności malejącej
  • Niestandardowa funkcja porównaj
  • Inne typy danych
  • Wniosek

Domyślne sortowanie

Domyślne sortowanie w kolejności rosnącej. Składnia tego jest:

szablon
void sort (najpierw RandomAccessiterator, LasterAccessiterator Last);

Sortowanie całego wektora

Poniższy kod sortuje cały wektor:

Sort (vtr.początek (), vtr.koniec());
dla (int i = 0; iCout<Cout<Niepustowa lista to:

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

Sortowana lista to:

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

który jest poprawny. Jeśli sortowanie jest nieprawidłowe, to usta jest uzasadnienie programatora, a nie funkcji sort ().

RandomAccessiterator jest nieodłączny. vtr.początek () zwraca iterator, który wskazuje na pierwszy element, i VTR.end () zwraca inny iterator tego samego typu, który wskazuje tuż po ostatnim elemencie. Więc nie ma potrzeby tworzenia instalacji wektora, losowego,. W ten sposób cała lista jest sortowana.

Sortowanie zasięgu w kolejności rosnącej

Powyższa lista niepohamowana ma dziesięć elementów z indeksami:

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

Aby sortować tylko elementy z pozycji 4, czyli wskaźnik, 3 = 4 - 1, do pozycji 9, czyli wskaźnik, 8 = 9 - 1, dodaj 3 do VTR.rozpocząć () mieć pierwszy iterator, a następnie dodaj 8 do VTR.początek () mieć ostatni iterator, dla funkcji sort (). 9th element indeksu 8 nie zostanie uwzględniony w sortowaniu. Oznacza to, że ostatni element wskazany w wybranym zakresie jest wykluczony do sortowania. Poniższy kod to ilustruje:

Sort (vtr.początek () + 3, vtr.początek () + 8);
dla (int i = 0; iCout<Cout<Niepustowa lista to:

Z, x, c, v, b, n, m, a, s, d,
[/c] c
Sortowana lista to:
[cc lang = "text" szerokie = "100%" height = "100%" uciekł = "true" motyw = "blackboard" nowrapt = "0"]
Z, X, C, A, B, M, N, V, S, D, D,,

Elementy w pozycjach 4, 5, 6, 7, 8 zostały posortowane. Element w 9th Pozycja nie została uwzględniona w tym rodzaju. Pozycje te odpowiadają indeksom 3, 4, 5, 6, 7. Element przy indeksie 8 nie został uwzględniony w tym rodzaju.

Aby uporządkować zasięg, zidentyfikuj pierwsze i ostatnie elementy w zakresie, niekoniecznie z całej listy. Dodaj indeks pierwszego elementu do iteratora początkowego (). Dodaj indeks ostatniego elementu, wciąż do iteratora początkowego (). Pamiętaj, że ostatni element zasięgu nie zostanie uwzględniony w tym rodzaju, ale pierwszy element dla zakresu zostanie uwzględniony.

Dodanie indeksu do iteratora jest możliwe, ponieważ dodanie liczby jest takie samo, jak zwiększenie iteratora tej samej liczby razy. Zakładanie iteratora, co oznacza, że ​​jest to punkt do następnego elementu.

Sortowanie w kolejności malejącej

Składnia to:

szablon
void sort (najpierw RandomAccessiterator, Last IsCesaCssiterator Last, porównaj kompozycję);

Różni się to od powyższej składni z obecnością „Porównaj kompozycję”. Comp jest wskaźnikiem funkcji lub obiektem funkcyjnym. Comp faktycznie decyduje, czy sortowanie powinno się rosnąć, czy schodzić. Jego nieobecność jest domyślnym przypadkiem, co oznacza zejście.

Sortowanie całej listy w kolejności malejącej

Poniższy kod sortuje cały powyższy wektor w kolejności malejącej:

Sort (vtr.początek (), vtr.end (), większy());
dla (int i = 0; iCout<Cout<Niepustowa lista to:

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

Wektor posortowany w kolejności malejącej to:

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

Zwróć uwagę na użycie „większych ()” w miejscu kompletu.

Przeciwieństwo większego () jest mniej (), co jest domyślnym (wznoszącym się) i nie trzeba go wpisać.

Sortowanie zasięgu w kolejności malejącej

Zakres może być sortowany w kolejności malejącej, a także w kolejności rosnącej. Poniższy kod sortuje 4th do 9th element bez włączenia 9th element; i schodzenie.

Sort (vtr.początek () + 3, vtr.początek () + 8, większy());
dla (int i = 0; iCout<Cout<Niepustowa lista to:

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

Wektor z wybranym zasięgiem, posortowany w kolejności malejącej, to:

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

Niestandardowa funkcja porównaj

Poniższy program ma niestandardową funkcję porównania dla sortowania wznoszącego się:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
vectorvtr = 'z', „x ',' c ',' v ',' b ',' n ',' m ',' a ',', ',' d ';
Bool Porównaj (char A, char b)
powrót (a < b);

int main ()

Sort (vtr.początek (), vtr.end (), porównaj);
dla (int i = 0; iCout<Cout<powrót 0;

Funkcja wykonania porównania nazywana jest porównanie. Zwraca bool. Ma dwa parametry, A i B, tego samego typu, co typ elementu wektora. Zwraca prawdę, jeśli a jest mniej niż b i fałszywe w przeciwnym razie. Nazwa tej funkcji jest trzecim argumentem wywołania funkcji sort (). W tym programie porównaj jest taki sam jak Less (). Można użyć niektórych innych nazwisk zamiast porównywania.

Niepustowa lista to:

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

Sortowana lista to:

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

Oczywiście funkcja porównywania niestandardowego może być używana dla zasięgu. Poniższy program ilustruje to:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
vectorvtr = 'z', „x ',' c ',' v ',' b ',' n ',' m ',' a ',', ',' d ';
Bool Porównaj (char A, char b)
powrót (a < b);

int main ()

Sort (vtr.początek () + 3, vtr.początek () + 8, porównaj);
dla (int i = 0; iCout<Cout<powrót 0;

Niepustowa lista to:

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

Sortowana lista to:

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

Funkcję porównania można zakodować w celu zejścia. Poniższy program ilustruje to:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
vectorvtr = 'z', „x ',' c ',' v ',' b ',' n ',' m ',' a ',', ',' d ';
Bool Porównaj (char A, char b)
return (a> b);

int main ()

Sort (vtr.początek (), vtr.end (), porównaj);
dla (int i = 0; iCout<Cout<powrót 0;

Po prostu zmiana (A B).

Niepustowa lista to:

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

Sortowana lista to:

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

Funkcja Porównanie niestandardowej może być używana dla zasięgu, w kolejności malejącej. Poniższy program ilustruje to:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
vectorvtr = 'z', „x ',' c ',' v ',' b ',' n ',' m ',' a ',', ',' d ';
Bool Porównaj (char A, char b)
return (a> b);

int main ()

Sort (vtr.początek ()+3, vtr.początek ()+8, porównaj);
dla (int i = 0; iCout<Cout<powrót 0;

Niepustowa lista to:

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

Wektor z wybranym zasięgiem, posortowany w kolejności malejącej, to:

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

Inne typy danych

Inne typy danych można sortować za pomocą ich typów. Na przykład, jeśli typ danych INT ma zostać sortowany, wówczas „int” zostanie użyty do utworzenia wektora oraz w funkcji wbudowanej lub niestandardowej porównywania. Jeśli typ danych znajduje się w bibliotece, wówczas nagłówek biblioteki musi być zawarty w programie, podobnie jak w przypadku poniższego ciągu:

#włączać
#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
vectorvtr = „zee”, „xe”, „ce”, „ve”, „be”, „ne”, „me”, „ae”, „se”, „de”;
int main ()

Sort (vtr.początek (), vtr.end (), wielki ());
dla (int i = 0; iCout<Cout<powrót 0;

Niepustowa lista to:

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

Sortowana lista to:

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

Wniosek

C ++ jest wyposażony w bibliotekę algorytmu, która ma funkcję sort (). Ta funkcja przyjmuje dwa lub trzy argumenty w normalnym użyciu. Pierwszy argument to miejsce, w którym lista wektorowa powinna się zacząć. Drugi argument to miejsce, w którym lista wektorowa powinna się skończyć. Trzeci argument określa, czy sortowanie ma być wykonane w kolejności rosnącej, czy w kolejności malejącej.