unordered_set – třída
Třída šablony popisuje objekt, který určuje různé sekvence prvků typu const Key s různými délkami.Sekvence je slabě seřazená podle funkce hash, která sekvenci rozděluje do uspořádané sady dílčích sekvencí, které se nazývají kbelíky.V rámci každého kbelíku funkce porovnání určuje, zda má nějaká dvojice prvků odpovídající řazení.Každý prvek slouží jako klíč řazení i hodnota.Sekvence je reprezentována způsobem, který umožňuje vyhledat, vložit a odebrat libovolný prvek s několika operacemi, které mohou být nezávislé na počtu prvků v sekvenci (konstantní čas), alespoň pokud všechny kbelíky mají přibližně stejnou délku.V nejhorším případě platí, že když jsou všechny prvky v jednom kbelíku, je počet operací úměrný počtu prvků v sekvenci (lineární čas).Vkládání prvků navíc nezruší platnost žádných iterátorů a odstranění prvku zruší platnost pouze těch iterátorů, které odkazují na odstraněný prvek.
template<class Key,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<Key> >
class unordered_set;
Parametry
Parametr |
Popis |
Key |
Klíčový typ |
Hash |
Typ objektu hashovací funkce |
Pred |
Typ objektu funkce porovnání rovnosti |
Alloc |
Třída alokátoru |
Členy
Definice typu |
Popis |
Typ alokátoru pro správu úložiště |
|
Typ konstantního iterátoru řízené sekvence |
|
Typ konstantního iterátoru kbelíku řízené sekvence |
|
Typ konstantního ukazatele na prvek |
|
Typ konstantního odkazu na prvek |
|
Typ vzdálenosti se znaménkem mezi dvěma prvky |
|
Typ hashovací funkce |
|
Typ iterátoru řízené sekvence |
|
Typ funkce porovnání |
|
Typ klíče řazení |
|
Typ iterátoru kbelíku řízené sekvence |
|
Typ ukazatele na prvek |
|
Typ odkazu na prvek |
|
Typ vzdálenosti bez znaménka mezi dvěma prvky |
|
Typ prvku |
Členská funkce |
Popis |
Určuje začátek řízené sekvence. |
|
Získá číslo kbelíku pro hodnotu klíče. |
|
Získá počet kbelíků. |
|
Získá velikost kbelíku. |
|
Určuje začátek řízené sekvence. |
|
Určuje konec řízené sekvence. |
|
Odebere všechny prvky. |
|
Zjistí počet prvků odpovídající zadanému klíči. |
|
Přidá prvek vytvořený v místě. |
|
Přidá prvek vytvořený v místě s nápovědou. |
|
Zkouší, zda nejsou přítomny žádné prvky. |
|
Určuje konec řízené sekvence. |
|
Najde rozsah, který odpovídá zadanému klíči. |
|
Odebere prvky v určených pozicích. |
|
Vyhledá prvek, který odpovídá zadanému klíči. |
|
Získá uložený objekt alokátoru. |
|
Získá uložený objekt hashovací funkce. |
|
Přidá prvky. |
|
Získá uložený objekt funkce porovnání. |
|
Spočítá průměrný počet prvků na kbelík. |
|
Získá maximální počet kbelíků. |
|
Získá nebo nastaví maximální počet prvků na kbelík. |
|
Získá maximální velikost řízené sekvence. |
|
Znovu vytvoří hashovací tabulku. |
|
Spočítá počet prvků. |
|
Zamění obsah dvou kontejnerů. |
|
Sestaví objekt kontejneru. |
Operátory |
Popis |
Zkopíruje tabulku hash. |
Poznámky
Objekt seřadí sekvenci, kterou ovládá, voláním dvou uložených objektů: objektu funkce porovnání typu unordered_set::key_equal a objektu hashovací funkce typu unordered_set::hasher.Přístup k prvnímu uloženému objektu je možný voláním členské funkce unordered_set::key_eq(); a ke druhému uloženému objektu voláním členské funkce unordered_set::hash_function().Konkrétně pro všechny hodnoty X a Y typu Key volání key_eq()(X, Y) vrátí hodnotu true, pouze pokud hodnoty dvou argumentů mají stejné pořadí; volání hash_function()(keyval) získá distribuci hodnot typu size_t.Na rozdíl od třídy šablony unordered_multiset – třída objekt třídy šablony unordered_set zajistí, že key_eq()(X, Y) má vždy hodnotu false pro jakékoli dva prvky řízené sekvence. (Klíče jsou jedinečné).
Objekt také uchovává faktor maximálního zatížení, který určuje maximální požadovaný průměrný počet prvků na kbelík.Pokud vložení prvku způsobí, že unordered_set::load_factor() překročí faktor maximálního zatížení, kontejner zvýší počet kbelíků a podle potřeby znovu vytvoří tabulku hash.
Skutečné pořadí prvků v řízené sekvenci závisí na hashovací funkci, funkci porovnání, pořadí vkládání, faktoru maximálního zatížení a aktuálním počtu kbelíků.Pořadí prvků v řízené sekvenci obecně nelze předvídat.Můžete si však vždy být jisti, že všechny dílčí množiny prvků, které mají ekvivalentní řazení, v řízené sekvenci sousedí.
Objekt přiděluje a uvolňuje úložiště pro sekvenci, kterou řídí, prostřednictvím uloženého objektu alokátoru typu unordered_set::allocator_type.Takový objekt alokátoru musí mít stejné externí rozhraní jako objekt třídy šablony allocator.Všimněte si, že uložený objekt alokátoru není zkopírován při přiřazení objektu kontejneru.
Požadavky
Hlavička: <unordered_set>
Obor názvů: std
Viz také
Referenční dokumentace
Bezpečný přístup z více vláken ve standardní knihovně C++