Klasa i obiekty
Klasa to zestaw zmiennych i funkcji, które działają razem, w których zmienne nie mają przypisanych wartości. Gdy wartości są przypisywane do zmiennych, klasa staje się obiektem. Różne wartości podane tej samej klasie powodują różne obiekty; to znaczy różne obiekty są tą samą klasą o różnych wartościach. Mówi się, że tworzenie obiektu z klasy tworzy instancję obiektu.
Nazwa, underporned_map, to klasa. Obiekt utworzony z klasy Unordered_Map ma nazwę wybraną przez programistę.
Potrzebna jest funkcja, która należy do klasy, aby utworzyć obiekt z klasy. W C ++ funkcja ta ma taką samą nazwę jak nazwa klasy. Obiekty utworzone (utworzone) z klasy mają różne nazwy, przez programista.
Tworzenie obiektu z klasy oznacza konstruowanie obiektu; Oznacza to również instancje.
Program C ++, który korzysta z klasy UNOPORED_MAP, zaczyna się od następujących wierszy u góry pliku:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
Pierwsza linia dotyczy wejścia/wyjścia. Druga wiersz ma umożliwić programowi korzystanie z wszystkich funkcji klasy UNOPORED_MAP. Trzeci wiersz umożliwia programowi użycie nazw w standardowej przestrzeni nazw.
Przeciążenie funkcji
Gdy dwa lub więcej różnych podpisów funkcji mają tę samą nazwę, mówi się, że ta nazwa jest przeciążona. Po wywołaniu jednej funkcji, liczba i rodzaj argumentów, określ, która funkcja jest faktycznie wykonywana.
Konstrukcja/konstrukcja kopii
Prosta konstrukcja
Mapa nieuporządkowana może być konstruowana i przypisana wartości w następujący sposób:
UNOPORDED_MAPUmap;
Umap [„banan”] = „żółty”;
umap [„winogron”] = „zielony”;
umap [„fig”] = „fiolet”;
Deklaracja zaczyna się od specjalizacji szablonu z typami par klucza i wartości. Następnie następuje wybrana nazwa programisty mapy; Potem półkolis. Drugi segment kodu pokazuje, jak przypisać wartości do ich kluczy.
Konstrukcja przez inicitizer_list
Można to zrobić w następujący sposób:
UNOPORDED_MAPUmap („banana”, „żółty”,
„winogron”, „zielony”, „fig”, „fioletowy”);
Konstrukcja poprzez przypisanie inicjalizatora_list
Przykład:
UNOPORDED_MAPumap = „banana”, „żółty”,
„winogron”, „zielony”, „fig”, „fioletowy”;
Konstrukcja poprzez kopiowanie kolejnej nieorządkowania_map
Przykład:
UNOPORDED_MAPUmap1 („banana”, „żółty”,
„winogron”, „zielony”, „fig”, „fioletowy”);
UNOPORDED_MAPUmap2 (Umap1);
Element pary
Poniższy kod pokazuje, jak tworzyć i uzyskać dostęp do elementu pary:
parapr = 'd', „morze”;
Cout << pr.first << '\n';
Cout << pr.second << '\n';
Wyjście to:
Dpierwsze i drugie to zarezerwowane słowa dla dwóch elementów w parze. Wartości w parze można nadal zmienić za pomocą pierwszego i drugiego.
Para jest wywoływana, wartość_type w temacie nieopisanej mapy.
dostęp do elementu UNOPORED_MAP
Mapped_Type & Operator [] (key_type && k)
Zwraca wartość dla odpowiedniego klucza. Przykład:
UNOPORDED_MAPUmap;
Umap [„banan”] = „żółty”;
umap [„winogron”] = „zielony”;
umap [„fig”] = „fiolet”;
const char *ret = umap [„winogron”];
Cout << ret <<'\n';
Wyjście to: „zielony”. Wartości można przypisać w ten sam sposób - patrz wyżej.
pojemność UNOPORED_MAP
size_type size () const noexcept
Zwraca liczbę par na mapie.
UNOPORDED_MAPUmap;
Umap [„banan”] = „żółty”;
umap [„winogron”] = „zielony”;
umap [„fig”] = „fiolet”;
Cout << umap.size() <<'\n';
Wyjście to 3.
bool pusty () const no -except
Zwraca 1 dla true, jeśli mapa nie ma pary, a 0 dla false, jeśli ma pary. Przykład:
UNOPORDED_MAPUmap;
Cout << umap.empty() <<'\n';
Wyjście to 1.
Powracające iteratory i klasa nieopisanej
Iterator jest jak wskaźnik, ale ma większą funkcjonalność niż wskaźnik.
początek () no -y -COUNT
Zwraca iterator, który wskazuje pierwszą parę obiektu mapy, jak w następującym segmencie kodu:
UNOPORDED_MAPUmap;
Umap [„banan”] = „żółty”; umap [„winogron”] = „zielony”; umap [„fig”] = „fiolet”;
UNOPORDED_MAP:: iterator iter = umap.zaczynać();
parapr = *iTer;
Cout << pr.first << ", " << pr.second << '\n';
Wyjście to: fig, fiolet. Mapa jest nie wypowiedziana.
początek () const noxcept;
Zwraca iterator, który wskazuje na pierwszy element kolekcji obiektów mapy. Gdy konstrukcja obiektu jest poprzedzona const, wyrażenie „start () const” jest wykonywane zamiast „początek ()”. W tym stanie elementy w obiekcie nie można zmodyfikować. Jest używany na przykład w następującym kodzie.
const unordered_mapUmap („banana”, „żółty”,
„winogron”, „zielony”, „fig”, „fioletowy”);
UNOPORDED_MAP:: const_iterator iter = umap.zaczynać();
parapr = *iTer;
Cout << pr.first << ", " << pr.second << '\n';
Wyjście to: fig, fiolet. Mapa jest nie wypowiedziana. Zauważ, że tym razem użyto const_iterator, zamiast tylko iteratora, aby otrzymać zwrócony iterator.
end () no -y -ctcept
Zwraca iterator, który wskazuje natychmiast poza ostatni element obiektu mapy.
end () const no -except
Zwraca iterator, który wskazuje natychmiast poza ostatni element obiektu mapy. Gdy konstrukcja obiektu map jest poprzedzona const, wyrażenie „end () const” jest wykonywane zamiast „end ()”.
Operacje UNOPORED_MAP
Iterator Find (const key_type & k)
Wyszukuje parę danego klucza na mapie. Jeśli zostanie znaleziony, zwraca iterator. Jeśli nie znaleziono, zwraca iterator, który wskazuje na koniec mapy, który nie jest parą. Poniższy kod pokazuje, jak korzystać z tej funkcji członka:
UNOPORDED_MAPUmap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
UNOPORDED_MAP:: iterator iter = umap.znaleźć („c”);
if (Umap.Znajdź („C”) != Umap.koniec())
parapr = *iTer;
Cout << pr.first << ", " << pr.second << '\n';
Wyjście to: C, D
const_iterator Find (const key_type & k) const;
Ta wersja funkcji jest wywoływana, jeśli tworzenie nieopisanej mapy rozpoczyna.
Modyfikatory UNOREDRED_MAP
Wstaw pary (wartość_type && obj)
Niezaportowana mapa oznacza, że pary nie są w żadnej kolejności. Tak więc program wstawia parę w dowolnym miejscu, które uzna za wygodne. Funkcja powraca, para. Jeśli wstawienie zakończyło się powodzeniem, Bool będzie 1 dla true, w przeciwnym razie byłoby to 0 dla fałszywego. Jeśli wstawienie zakończy się powodzeniem, iterator wskazuje na nowo włożony element. Poniższy kod ilustruje użycie:
UNOPORDED_MAPUmap;
Umap [„banan”] = „żółty”;
umap [„winogron”] = „zielony”;
umap [„fig”] = „fiolet”;
Umap.insert („Cherry”, „czerwony”, „Strawberry”, „czerwony”);
Cout << umap.size() << '\n';
Wyjście to: 5. Można włożyć więcej niż jedną parę.
Size_type Erase (const key_type & k)
Ta funkcja usuwa parę z UNOPOREDED_MAP. Poniższy segment kodu ilustruje:
UNOPORDED_MAPUmap;
Umap [„banan”] = „żółty”;
umap [„winogron”] = „zielony”;
umap [„fig”] = „fiolet”;
int num = umap.usunąć („winogron”);
Cout << umap.size() << '\n';
Wyjście to 2.
Void swap (Unordered_Map &)
W tym segmencie kodu można wymienić dwie nieoporządkowane mapy, jak pokazano w tym segmencie kodu:
UNOPORDED_MAPumap1 = „banana”, „żółty”,
„Grape”, „zielony”, „fig”, „fioletowy”, „Strawberry”, „czerwony”;
UNOPORDED_MAPumap2 = „Cherry”, „czerwony”, „lime”, „zielony”;
Umap1.zamiana (umap2);
UNOPORDED_MAP:: iterator Iter1 = umap1.zaczynać();
parapr1 = *iTer1;
UNOPORDED_MAP:: iterator ITER2 = umap2.zaczynać();
parapr2 = *iTer2;
Cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
Cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
UNOPORDED_MAPumap1 = „banana”, „żółty”,
„Grape”, „zielony”, „fig”, „fioletowy”, „Strawberry”, „czerwony”;
UNOPORDED_MAPumap2 = „Cherry”, „czerwony”, „lime”, „zielony”;
Umap1.zamiana (umap2);
UNOPORDED_MAP:: iterator Iter1 = umap1.zaczynać();
parapr1 = *iTer1;
UNOPORDED_MAP:: iterator ITER2 = umap2.zaczynać();
parapr2 = *iTer2;
Cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
Cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Wyjście to:
Pierwszy klucz i rozmiar Umap1: wapno, 2Mapa jest nie wypowiedziana. Zauważ, że długość mapy jest zwiększona w razie potrzeby. Typy danych muszą być takie same.
Klasa i jej instanowane obiekty
Wartość jest dla typu danych, ponieważ obiekt utworzony jest w klasie. Nieuporządkowana konstrukcja map może również zaakceptować klasę jako typ danych. Poniższy program ilustruje to:
#włączać
#włączać
za pomocą przestrzeni nazw Std;
klasa thecla
publiczny:
int num;
STATICA CH Ch;
void Func (Char Cha, const char *str)
Cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
Static void Fun (char c)
if (ch == 'a')
Cout << "Official static member function" << '\n';
;
int main ()
Thecla obj1; Thecla obj2; Thecla obj3; Thecla obj4; Thecla obj5;
UNOPORDED_MAPUmap;
umap = „banana”, obj1, „winogrona”, obj2, „fig”, obj3, „Strawberry”, obj4, „lime”, obj5;
Cout << umap.size() << '\n';
powrót 0;
Wyjście to: 5.
Definicja klasy ma dwa dane publiczne i dwie funkcje członków publicznych. W funkcji Main () różne obiekty dla klasy są tworzone. Następnie ulepszona mapa jest utworzona, gdzie każda para składa się z nazwy owocu i obiektu z klasy. Wyświetlany jest rozmiar mapy. Program kompiluje bez komunikatu ostrzegawczego lub błędu.
Zastosowanie mapy
Tablica kojarzy indeks do wartości. Pary kluczowe/wartości istnieją w wielu sytuacjach w życiu, które można zaprogramować. Kluczowa para owoców/koloru to tylko jeden przykład. Innym przykładem jest imię ludzi i ich wieków. W tym przypadku para będzie typu, para. Może być również parą. W tym drugim przypadku zastosowana zostanie dyrektywa przed przetwarzaniem. Para klucza/wartości może być nadal nazwiskami małżeństw. W krajach, w których występuje poligamia, będzie różne żony dla jednego człowieka.
Tworzenie mapy
Mapa nie jest macierzą dwuwymiarową, z dwiema kolumnami. Mapa działa z funkcją skrótu. Klucz jest kodowany przez funkcję skrótu, w liczbę całkowitą tablicy. To ta tablica utrzymuje wartości. Tak więc jest jedna tablica z wartościami, a klucze są odwzorowane na wskaźniki tablicy, a zatem tworzone są korespondencje między klawiszami i wartościami. Hashing jest obszernym tematem i nie jest omawiane w tym artykule.
Wniosek
Mapa, znana również jako tablica asocjacyjna to lista elementów, w której każdy element jest parą klucza/wartości. Tak więc każdy klucz odpowiada wartości. W C ++ mapa jest zaimplementowana jako struktura danych z funkcjami członkowskimi i operatorami. Uporządkowana mapa to taka, w której pary elementów zostały zamówione przez klucze. Niezaporządkowana mapa to taka, w której nie ma zamówienia.
Technicznie hasze składa się z elementów par. W rzeczywistości para jest całą strukturą danych z funkcjami członkowskimi i operatorami. Parametry dwóch szablonów dla pary to te same parametry szablonu dla nieopisowanego_map.
Lista inicjalizator mapy to literał literałów. Każdy literał wewnętrzny składa się z dwóch obiektów, pary klucza/wartości.
Funkcje członkowskie i operatorzy dla UNOPOREDED_MAP można podzielić na następujące nagłówki: Konstrukcja/kopia UNOPOREDED_MAP, pojemność UNOPORED_MAP, Iterator UNOREDRED_MAP, Operacje_mapu UNOPOREDED_MAP i UNOPOREDRED_MAP MODIFIERY.
Używana mapa jest używana, gdy klucz musi zostać zmapowany na wartość.