Dyrektywy preprocesora
Typy proste arytmetyczne
Typ prosty wyliczeniowy
Operatory
Dev C++ - tworzenie projektu
Strumienie we/wy cin i cout
Funkcje obsługi we/wy printf i scanf
Kolory w konsoli
Instrukcja warunkowa if, else if oraz else
Instrukcja switch, case, default
Pętla for
Pętla for iterująca po zakresie dostępna w standardzie C++11
Pętla while i do while
Tablice statyczne i dynamiczne
Funkcje
Szablony funkcji
Argumenty funkcji main
Modyfikatory dostępu do wartości const i static
Obszary dostępu do zmiennych
Funkcje i stałe matematyczne
Generowanie liczb pseudo losowych za pomocą funkcji srand oraz rand
Struktury
Tworzenie własnej listy dwukierunkowej
Klasy
Szablony klas na przykładzie własnej kolejki LIFO (stosu)
Metody wirtualne, czysto wirtualne oraz klasy abstrakcyjne
Obsługa i przeciążanie operatorów klas
Rzutowanie typów kompatybilnych za pomocą static_cast
Rzutowanie w dół i rzutowanie w górę za pomocą funkcji dynamic_cast
Rzutowanie za pomocą funkcji reinterpret_cast
Kontener typu stack - stos
Kontener typu list
Kontener typu vector
Kontener typu map - tablica asocjacyjna
Kontener typu unordered_map - tablica asocjacyjna
Kontener typu set - zbiór
Kontener typu unordered_set - zbiór niesortowany
Sortowanie elementów kontenera vector
Klasa string
Funkcje związane z operacjami na łańcuchach znaków
Konwersja tekst - liczba
Operacje we/wy na plikach
Przeszukiwanie ścieżki w poszukiwaniu plików za pomocą funkcji _findfirst i _findnext
Własne pliki nagłówkowe .h
Polskie znaki w konsoli
Menu konsolowe z wykorzystaniem funkcji getch
Zmiana rozmiarów okna i bufora konsoli
Ta strona należy do działu:
Programowanie poddziału
Podstawy C++ Autor podstrony: Krzysztof Zajączkowski
Stronę tą wyświetlono już: 5964 razy
Wstęp
Definicja klasy unordered_map mieści się w pliku nagłówkowym unordered_map i jest dostępna od standardu C++ 11 w kompilatorach ten standard obsługujących. Sama klasa różni się od opisywanej na stronie Programowanie → Podstawy C++ → Kontener typu map - tablica asocjacyjna tym, że nie wykonuje ona sortowania elementów, a kolejne elementy dodawane są na samym początku tejże tablicy asocjacyjnej dzięki czemu dodawanie elementów do obiektu klasy unordered_map jest znacznie szybsze.
Konstruktory klasy unordered_map
Standardowo klasa unordered_map udostępnia konstruktor bezparametrowy oraz konstruktor kopiujący. Pierwszy z nich tworzy obiekt klasy unordered_map nie posiadający elementów, drugi kopiuje elementy podanego jako argument obiektu tego samego typu.
std::unordered_map<std::string, int> unorderedmap;
std::unordered_map<std::string, int> unorderedmap_copy(unorderedmap);
Istnieje jeszcze możliwość zainicjalizowania obiektu klasy unordered_map elementami za pomocą konstruktora w następujący sposób:
std::unordered_map<std::string, int> unorderedmap( {{"key 1", 0}, {"key 2", 1}} );
Możliwe jest również skopiowanie zakresu danych z innego obiektu tego samego typu za pomocą konstruktora:
std::unordered_map<std::string, int> unorderedmap( {{"key 1", 0}, {"key 2", 1}} );
std::unordered_map<std::string, int> unorderedmap_copy( unorderedmap.begin(), unorderedmap.end() );
Dodawanie i odwoływanie się do elementów do obiektu klasy unordered_map
Elementy do obiektu klasy unordered_map można dodawać za pośrednictwem operatora [] w następujący sposób:
std::unordered_map<std::string, int> unorderedmap;
unorderedmap["key 1"] = 20;
unorderedmap["key 2"] = 30;
Ten sam operator umożliwia dostęp do wartości stojącej za danym kluczem:
auto value = unorderedmap["key 1"];
Elementy można również dodawać za pomocą metody insert :
std::unordered_map<std::string, int> unorderedmap;
std::unordered_map<std::string, int> unorderedmap2( {{"key 6", 10}, {"key 7", 12}} );
unorderedmap.insert( {{"key 3", 23}, {"key 4", 45}} );
unorderedmap.insert( std::make_pair<std::string,double>("key 5", 5) );
unorderedmap.insert( unorderedmap2.begin(), unorderedmap.end() );
Sprawdzanie czy klucz istnieje i znajdowanie elementu stojącego za danym kluczem
Metoda find umożliwia sprawdzenie, czy dany klucz istnieje w tablicy asocjacyjnej:
std::unordered_map<std::string, int> unorderedmap( {{"key 1", 10}, {"key 2", 20}} );
if(unorderedmap.find("key 1") != unorderedmap.end()){
std::cout << "Key: \aposkey 1\apos exist" << std::endl;
}else{
std::cout << "Key: \aposkey 1\apos not exist" << std::endl;
}
Iterowanie po elementach obiektu klasy unordered_map
Po elementach obiektu klasy unordered_map można iterować wykorzystując wskaźnik zawierający pola first (klucz); second (wartość). Oto przykład:
std::unordered_map<std::string, int> unorderedmap;
unorderedmap["key 1"] = 1;
unorderedmap["key 2"] = 2;
for(std::map<std::string, int, Compare>::iterator element = unorderedmap.begin(); element != unorderedmap.end(); element ++){
std::cout << element->first << ": " << element->second << std::endl;
}
W C++ 11 można iterować też w inny sposób:
std::unordered_map<std::string, int> unorderedmap( {{"key 1", 1}, {"key 2", 2}} );
for(auto& elemenent: unorderedmap) std::cout << "Key: " << element.first() << " value: " << element.end() << std::endl;
Usuwanie elementów z obiektu klasy unordered_map
Metoda erase umożliwia usunięcie jednego elementu lub zakresu elementów z tablicy. Możliwe jest to poprzez podanie wskaźnika lub wskaźników (w przypadku usuwania zakresu danych) na elementy zawarte wewnątrz tejże klasy w następujący sposób:
std::unordered_map<std::string, int> unorderedmap;
unorderedmap["key 1"] = 1;
unorderedmap["key 2"] = 2;
unorderedmap.erase(unorderedmap.begin(), unorderedmap.end());
Możliwe jest również posłużenie się wartościami kluczy:
std::unordered_map<std::string, int> unorderedmap;
unorderedmap["key 1"] = 1;
unorderedmap["key 2"] = 2;
unorderedmap.erase(std::string("key 1"));
Liczba elementów zawartych w obiekcie klasy unordered_map
Metoda size umożliwia uzyskanie informacji liczbie elementów zawartych w obiekcie klasy unordered_map .
Sprawdzanie, czy obiekt klasy unordered_map nie zawiera elementów
Metoda empty zwraca true, gdy obiekt klasy unordered_map nie zawiera elementów.
Strony powiązane
Tematy powiązane