Jak używać mapy C ++ nieopisowanej

Jak używać mapy C ++ nieopisowanej
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. Różne klucze mogą mieć tę samą wartość dla zwykłej pracy. Na przykład klucze mogą być listą owoców i odpowiednich wartości, kolorów owoców. 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. W tym artykule wyjaśniono, jak używać mapy C ++ Un -Oriented, napisanej jako Underporned_Map. Potrzebujesz wiedzy w wskazówkach C ++, aby zrozumieć ten artykuł. UNOPORDED_MAP jest częścią standardowej biblioteki C ++.

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_MAP Umap;
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_MAP Umap („banana”, „żółty”,
„winogron”, „zielony”, „fig”, „fioletowy”);

Konstrukcja poprzez przypisanie inicjalizatora_list
Przykład:

UNOPORDED_MAP umap = „banana”, „żółty”,
„winogron”, „zielony”, „fig”, „fioletowy”;

Konstrukcja poprzez kopiowanie kolejnej nieorządkowania_map
Przykład:

UNOPORDED_MAP Umap1 („banana”, „żółty”,
„winogron”, „zielony”, „fig”, „fioletowy”);
UNOPORDED_MAP Umap2 (Umap1);

Element pary

Poniższy kod pokazuje, jak tworzyć i uzyskać dostęp do elementu pary:

para pr = 'd', „morze”;
Cout << pr.first << '\n';
Cout << pr.second << '\n';

Wyjście to:

D
morze

pierwsze 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_MAP Umap;
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_MAP Umap;
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_MAP Umap;
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_MAP Umap;
Umap [„banan”] = „żółty”; umap [„winogron”] = „zielony”; umap [„fig”] = „fiolet”;
UNOPORDED_MAP:: iterator iter = umap.zaczynać();
para pr = *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_map Umap („banana”, „żółty”,
„winogron”, „zielony”, „fig”, „fioletowy”);
UNOPORDED_MAP:: const_iterator iter = umap.zaczynać();
para pr = *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_MAP Umap;
umap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
UNOPORDED_MAP:: iterator iter = umap.znaleźć („c”);
if (Umap.Znajdź („C”) != Umap.koniec())
para pr = *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_MAP Umap;
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_MAP Umap;
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_MAP umap1 = „banana”, „żółty”,
„Grape”, „zielony”, „fig”, „fioletowy”, „Strawberry”, „czerwony”;
UNOPORDED_MAP umap2 = „Cherry”, „czerwony”, „lime”, „zielony”;
Umap1.zamiana (umap2);
UNOPORDED_MAP:: iterator Iter1 = umap1.zaczynać();
para pr1 = *iTer1;
UNOPORDED_MAP:: iterator ITER2 = umap2.zaczynać();
para pr2 = *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_MAP umap1 = „banana”, „żółty”,
„Grape”, „zielony”, „fig”, „fioletowy”, „Strawberry”, „czerwony”;
UNOPORDED_MAP umap2 = „Cherry”, „czerwony”, „lime”, „zielony”;
Umap1.zamiana (umap2);
UNOPORDED_MAP:: iterator Iter1 = umap1.zaczynać();
para pr1 = *iTer1;
UNOPORDED_MAP:: iterator ITER2 = umap2.zaczynać();
para pr2 = *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, 2
Pierwszy klucz i rozmiar Strawberry Umap2, 4

Mapa 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_MAP Umap;
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ść.