Kontener typu unordered_set - zbiór niesortowany

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 3276 razy

Wstęp

Klasa unordered_set jest dostępna od standardu C++ 11 po załączeniu pliku nagłówkowego unordered_set. Klasa ta różni się od klasy set tym, że elementy nie są dodawane z jednoczesnym sortowaniem dzięki czemu czas dodawanie kolejnych elementów jest krótszy.

Konstruktory klasy unordered_sort

Klasa unordered_sort jak każdy kontener posiada konstruktor bezparametrowy i konstruktor kopiujący:

std::unordered_set<int> set; std::unordered_set<int> setCopy(set);

Możliwe jest również wypełnienie obiektu klasy unordered_set elementami już na etapie konstruktora w następujący sposób:

std::unordered_set<int> set( { 10, 20, 20, 30, 30, 40 } );

Możliwe jest też skopiowanie wartości z tablicy:

int table[] = { 10, 20, 20, 30, 30, 40 }; std::unordered_set<int> set( table, table + sizeof(table) / sizeof(int));

lub innego obiektu klasy unordered_set:

std::unordered_set<int> set( { 10, 20, 20, 30, 30, 40 } ); std::unordered_set<int> set2(set.begin(), set.end());

Iterowanie po elementach obiektu klasy unordered_set

Iterowanie po elementach w C++ 11 wygląda następująco:

std::unordered_set<int> set( { 10, 20, 20, 30, 30, 40 } ); for(auto& element: set) std::cout << element << std::endl;

Dodawanie i usuwanie elementów klasy unordered_set

Dodawanie kolejnych elementów można wykonywać za pomocą metody insert:

std::unordered_set<int> unordered_set({0, 100, 20, 20, 30, 40}); unordered_set.insert(10); sunordered_setet.insert(table, table + sizeof(table) / sizeof(int)); for(auto& element: unordered_set){ std::cout << element << std::endl; }

natomiast do usunięcia elementu z obiektu klasy set konieczne jest metody erase:

std::unordered_set<int> unordered_set({0, 100, 20, 25, 30, 40}); set.erase(100); // usunie element zawierający wartość 100 set.erase(set.begin()); // usunie pierwszy element set.erase(set.find(25), set.end()); // usunie elementy większe lub równe 25 for(auto& element: unordered_set){ std::cout << *i << std::endl; }

Wynik działania powyższego kodu:

20

Możliwe jest również usunięcie wszystkich elementów obiektu klasy set za pomocą metody clear.

Zamiana elementów dwóch obiektów klasy unordered_set

Za pomocą metody swap elementy dwóch obiektów klasy unordered_set mogą zostać zamienione miejscami. Oto przykład:

std::unordered_set<int> unorderedset( {0, 100, 20, 20, 30, 40} ); std::unordered_set<int> unorderedset2(table, table + 3); std::cout << "object unordered_set before swap operation:" << std::endl; for(auto& element: unordered_set){ std::cout << element << std::endl; } std::cout << "object unordered_set2 before swap operation:" << std::endl; for(auto& element: unordered_set2){ std::cout << element << std::endl; } unordered_set.swap(unordered_set2); std::cout << "object unordered_set after swap operation:" << std::endl; for(auto& element: unordered_set){ std::cout << element << std::endl; } std::cout << "object unordered_set2 after swap operation:" << std::endl; for(auto& element: unordered_set2){ std::cout << element << std::endl; }

Wynik działania powyższego kodu:

object unordered_set before swap operation:
0
20
30
40
100
object unordered_set2 before swap operation:
0
20
100
object unordered_set after swap operation:
0
20
100
object unordered_set2 after swap operation:
0
20
30
40
100

Znajdowanie wskaźnika na element zawarty w obiekcie klasy unordered_set oraz sprawdzanie, czy element istnieje

Za pomocą metody find można uzyskać wskaźnik na szukany element w obiekcie klasy unordered_set. Metoda ta zwraca wskaźnik na koniec gdy element nie zostanie odnaleziony. W celu sprawdzenia, czy element istnieje można posłużyć się również metodą count, która zwraca 1, gdy element istnieje a 0 w przeciwnym przypadku.

Liczba elementów zawartych w obiekcie klasy unordered_set oraz sprawdzanie, czy obiekt nie ma elementów

Liczebność elementów obiektu klasy unordered_set można uzyskać za pomocą metody size, natomiast metodą empty można uzyskać informację o tym, czy obiekt nie zawiera żadnych elementów.

Strony powiązane
strony powiązane
  1. cplusplus.com/reference/unordered_set/unordered_set/ - opis klasy unordered_set [en]
Propozycje książek