Sortowanie elementów w zestawie C ++

Sortowanie elementów w zestawie C ++
Przykładem zestawu jest: st = „e”, „a”, „d”, „b”, „c”

Znaki wejściowe tutaj są nieporządkowane. Ten zestaw można utworzyć za pomocą następującego instrukcji:

ustawić st = „e”, „a”, „d”, „b”, „c”;

To jest zestaw znaków. Możliwe jest posiadanie zestawu innego typu. Cokolwiek ma miejsce do ustawienia kodowania, biblioteka zestawu C ++ musi zostać uwzględniona w programie. Rozważ następujący program:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

setst = „e”, „a”, „d”, „b”, „c”;
for (set :: iterator iter = st.zaczynać(); iter != st.koniec(); ITER ++)
Cout<< *iter<< ", ";
Cout<powrót 0;

Wyjście to:

A, b, c, d, e,

Wyjście jest sortowane, gdy wejście nie zostało sortowane. Po włożeniu elementów do zestawu stają się sortowane. Z domyślnym ustawieniem, jak w powyższym programie, sort.

Powyższy program rozpoczął się od włączenia biblioteki iostream. Jest to potrzebne do użycia z terminalem (konsolą). Następny wiersz to kolejna dyrektywa, która obejmuje bibliotekę zestawu. Linia po nie jest dyrektywą. Jest to stwierdzenie kończące się półkolisem, nalegającym, aby każda nazwa nie poprzedzona „std ::” pochodzi ze standardowej przestrzeni nazw.

Po liniach nagłówka następuje funkcja C ++ Main (). Pierwsze stwierdzenie w głównej funkcji deklaruje zestaw. Drugi segment kodu wyświetla wartości zestawu, który powinien zostać poddany wewnętrzne sortowanie, według C++.

Po ustawianiu sortowanego wstępu

W standardowej przestrzeni nazw składnia do konstruowania zestawu jest właściwie:

szablon, Class Allocator = Allocator> Zestaw klas;

Istnieją tutaj trzy specjalizacje szablonów. Jeśli programista nie jest podany przez programista, wartość domyślna jest wybierana przez C++. Jeśli ostatni i drugi nie jest podany przez programista, wybrane są ich wartości domyślne. Wartość domyślna dla drugiej specjalizacji to „mniej”, co oznacza, że ​​sortuje się. Jeśli zostanie pominięty, zestaw jest nadal sortowany. Jeśli jest obecny jako „mniej”, zestaw jest sortowany wznoszący się, jak pokazuje następujący program:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

ustawićst = „e”, „a”, „d”, „b”, „c”;
for (set :: iterator iter = st.zaczynać(); iter != st.koniec(); ITER ++)
Cout<< *iter<< ", ";
Cout<powrót 0;

Zauważ, że „char” znajduje się na miejscu „klucza” w „mniej”. Wyjście to:

A, b, c, d, e,

posortowany wstęp. Program zaczyna się od włączenia biblioteki iostream. Jest to potrzebne do użycia z terminalem (konsolą). Następny wiersz to kolejna dyrektywa, która obejmuje bibliotekę zestawu. Linia po nie jest dyrektywą. Jest to stwierdzenie kończące się półkolisem, nalegającym, aby każda nazwa nie poprzedzona „std ::” pochodzi ze standardowej przestrzeni nazw.

Po liniach nagłówka następuje funkcja C ++ Main (). Pierwsze stwierdzenie w głównej funkcji deklaruje zestaw za pomocą „mniej” jako specjalizacji drugiego szablonu. Drugi segment kodu wyświetla wartości zestawu, który powinien odpowiednio przeszedł wewnętrzne sortowanie, przez C++.

Po ustawianiu sortowanych zstępów

Aby mieć sortowane zejście, należy uwzględnić drugą specjalizację. Jest „większy”, gdzie „klucz” jest zastępowany przez typ danych. Coraz większe są predefiniowane funkcje w bibliotece zestawu. Poniższy program wynika z zestawu sortowanego zstępującego:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

ustawićst = „e”, „a”, „d”, „b”, „c”;
for (set :: iterator iter = st.zaczynać(); iter != st.koniec(); ITER ++)
Cout<< *iter<< ", ";
Cout<powrót 0;

Wyjście to:

E, D, C, B, A,

posortowane zstępowanie. Program zaczyna się od włączenia biblioteki iostream. Jest to potrzebne do użycia z terminalem (konsolą). Następny wiersz to kolejna dyrektywa, która obejmuje bibliotekę zestawu. Linia po nie jest dyrektywą. Jest to stwierdzenie kończące się na półkolisie, naleganie, aby każda nazwa nie poprzedzona przez „std ::” jest standardową przestrzenią nazw.

Po liniach nagłówka następuje funkcja C ++ Main (). Pierwsze stwierdzenie w głównej funkcji deklaruje zestaw za pomocą „większej” jako specjalizacji drugiego szablonu. Drugi segment kodu wyświetla wartości zestawu, który powinien odpowiednio przeszedł wewnętrzne sortowanie, przez C++.

Obserwatorzy

Składnie dla obserwatorów ustawionych są:

key_compary key_comp () const;

I

value_compary value_comp () const;
key_compary key_comp () const
Rozważ następujący segment kodu:
ustawić> st = 'e', „a”, „d”, „b”, „c”;
Bool Bl = ST.key_comp () („c”, „d”);
Cout << bl << endl;

Wyjście to: 1, dla prawdziwego.

key_comp () jest funkcją członkowską klasy SET. Nie wymaga żadnego argumentu. Zwraca obiekt funkcyjny, który jest funkcją, która przyjmuje dwa argumenty. Obiekt funkcyjny (wywołanie) jest identyfikowany w drugim stwierdzeniu powyżej jako „ST.key_comp () () ”. Oczekuje się, że jego argumenty będą elementami zestawu po wewnętrznym sortowaniu w oparciu o specjalizację szablonu porównaj.

Jeśli jego pierwszy argument jest pierwszy w zestawie po wewnętrznym sortowaniu, obiekt funkcji zwróci true, w przeciwnym razie zwróci false. Wszystko, co jest kodowane w drugim stwierdzeniu powyżej.

Gdyby specjalizacja szablonu porównania była „większa”, wówczas wyjście wynosiło 0, dla fałszywych.

value_compary value_comp () const;

Dotyczy to wartości zestawu par klucz/wartość - patrz później.

Wniosek

Po wprowadzeniu elementów do zestawu w C ++ są one natychmiast sortowane wewnętrznie. Jeśli specjalizacja szablonu porównania jest „mniej”, co jest domyślne i można ją pominąć, sortowanie zostanie wykonane. Jeśli jest „większe”, sortowanie zostanie wykonane. „Klucz” w tych wyrażeniach jest zastępowany typem wartości w zestawie. Wartości są jednym typem.

Tak więc zestaw nie wymaga funkcji elementu sortowania, ponieważ wartości są zawsze sortowane. Gdy zestaw jest tworzony za pomocą niektórych początkowych elementów, elementy te są sortowane. Każda wkładka dowolnego elementu po tym powoduje ponowne sortowanie. Wartości zestawu jako opisanego powyżej nazywane są klucze. Jednak niektóre zestawy mogą mieć pary klucza/wartości - patrz później.