Sdílet prostřednictvím


concurrent_unordered_map – třída

Třída concurrent_unordered_map je kontejner bezpečný pro souběžnost, který řídí různou sekvenci délky prvků typu std::pair<const K, _Element_type>. Posloupnost je reprezentována způsobem, který umožňuje souběžné připojení, přístup k prvkům, přístup k iterátoru a procházení iterátoru. V této chvíli souběžnost znamená, že ukazatele nebo iterátory jsou vždy platné. Nejedná se o záruku inicializace prvků ani konkrétního pořadí procházení.

Syntaxe

template <typename K,
    typename _Element_type,
    typename _Hasher = std::hash<K>,
    typename key_equality = std::equal_to<K>,
    typename _Allocator_type = std::allocator<std::pair<const K,
    _Element_type>>
>,
typename key_equality = std::equal_to<K>,
    typename _Allocator_type = std::allocator<std::pair<const K,
    _Element_type>>> class concurrent_unordered_map : public details::_Concurrent_hash<details::_Concurrent_unordered_map_traits<K,
    _Element_type,
details::_Hash_compare<K,
    _Hasher,
key_equality>,
    _Allocator_type,
false>>;

Parametry

K
Klíčový typ

_Element_type
Mapovaný typ

_Hasher
Typ objektu hashovací funkce Tento argument je nepovinný a výchozí hodnota je std::hash<K>.

key_equality
Typ objektu funkce porovnání rovnosti Tento argument je nepovinný a výchozí hodnota je std::equal_to<K>.

_Allocator_type
Typ představující uložený objekt alokátoru, který zapouzdřuje podrobnosti o přidělení a uvolnění paměti pro souběžnou neuspořádanou mapu. Tento argument je nepovinný a výchozí hodnota je std::allocator<std::pair<K, _Element_type>>.

Členové

Veřejné definice typedef

Jméno popis
allocator_type Typ alokátoru pro správu úložiště
const_iterator Typ konstantního iterátoru řízené sekvence
const_local_iterator Typ konstantního iterátoru kbelíku řízené sekvence
const_pointer Typ konstantního ukazatele na prvek
const_reference Typ konstantního odkazu na prvek
difference_type Typ vzdálenosti se znaménkem mezi dvěma prvky
hasher Typ hashovací funkce
iterator Typ iterátoru řízené sekvence
key_equal Typ funkce porovnání
key_type Typ klíče řazení
local_iterator Typ iterátoru kbelíku řízené sekvence
mapped_type Typ mapované hodnoty přiřazené ke každému klíči
pointer Typ ukazatele na prvek
reference Typ odkazu na prvek
size_type Typ vzdálenosti bez znaménka mezi dvěma prvky
value_type Typ prvku

Veřejné konstruktory

Jméno popis
concurrent_unordered_map Přetíženo. Vytvoří souběžnou neuspořádanou mapu.

Veřejné metody

Jméno popis
Na Přetíženo. Vyhledá prvek v objektu concurrent_unordered_map se zadanou hodnotou klíče.. Tato metoda je bezpečná pro souběžnost.
hash_function Získá uložený objekt hashovací funkce.
Vložit Přetíženo. Přidá do objektu concurrent_unordered_map prvky.
key_eq Získá uložený objekt funkce porovnání rovnosti.
Swap Prohodí obsah dvou concurrent_unordered_map objektů. Tato metoda není bezpečná pro souběžnost.
unsafe_erase Přetíženo. Odebere prvky ze concurrent_unordered_map zadaných pozic. Tato metoda není bezpečná pro souběžnost.

Veřejné operátory

Jméno popis
operator[] Přetíženo. Vyhledá nebo vloží prvek se zadaným klíčem. Tato metoda je bezpečná pro souběžnost.
operator= Přetíženo. Přiřadí obsah jiného concurrent_unordered_map objektu k tomuto objektu. Tato metoda není bezpečná pro souběžnost.

Poznámky

Podrobné informace o concurrent_unordered_map třídě naleznete v tématu Paralelní kontejnery a objekty.

Hierarchie dědičnosti

_Traits

_Concurrent_hash

concurrent_unordered_map

Požadavky

Hlavička: concurrent_unordered_map.h

Obor názvů: souběžnost

v

Vyhledá prvek v objektu concurrent_unordered_map se zadanou hodnotou klíče.. Tato metoda je bezpečná pro souběžnost.

mapped_type& at(const key_type& KVal);

const mapped_type& at(const key_type& KVal) const;

Parametry

KVal
Hodnota klíče, kterou chcete najít.

Vrácená hodnota

Odkaz na datovou hodnotu nalezeného prvku.

Poznámky

Pokud není nalezena hodnota klíče argumentu, funkce vyvolá objekt třídy out_of_range.

Začít

Vrátí iterátor odkazující na první prvek souběžného kontejneru. Tato metoda je bezpečná pro souběžnost.

iterator begin();

const_iterator begin() const;

Vrácená hodnota

Iterátor na první prvek souběžného kontejneru.

cbegin

Vrátí const iterátor odkazující na první prvek v souběžného kontejneru. Tato metoda je bezpečná pro souběžnost.

const_iterator cbegin() const;

Vrácená hodnota

Iterátor const na první prvek souběžného kontejneru.

cend

Vrátí const iterátor odkazující na umístění úspěšné poslední prvek v souběžného kontejneru. Tato metoda je bezpečná pro souběžnost.

const_iterator cend() const;

Vrácená hodnota

Iterátor const iterátoru do umístění úspěšného posledního prvku v souběžnému kontejneru.

Jasné

Vymaže všechny prvky v souběžnému kontejneru. Tato funkce není bezpečná pro souběžnost.

void clear();

concurrent_unordered_map

Vytvoří souběžnou neuspořádanou mapu.

explicit concurrent_unordered_map(
    size_type _Number_of_buckets = 8,
    const hasher& _Hasher = hasher(),
    const key_equal& key_equality = key_equal(),
    const allocator_type& _Allocator = allocator_type());

concurrent_unordered_map(
    const allocator_type& _Allocator);

template <typename _Iterator>
concurrent_unordered_map(_Iterator _Begin,
    _Iterator _End,
    size_type _Number_of_buckets = 8,
    const hasher& _Hasher = hasher(),
    const key_equal& key_equality = key_equal(),
    const allocator_type& _Allocator = allocator_type());

concurrent_unordered_map(
    const concurrent_unordered_map& _Umap);

concurrent_unordered_map(
    const concurrent_unordered_map& _Umap,
    const allocator_type& _Allocator);

concurrent_unordered_map(
    concurrent_unordered_map&& _Umap);

Parametry

_Iterace
Typ vstupního iterátoru.

_Number_of_buckets
Počáteční počet kontejnerů pro tuto neuspořádanou mapu.

_Hasher
Funkce hash pro tuto neuspořádanou mapu.

key_equality
Funkce porovnání rovnosti pro tuto neuspořádanou mapu.

_Přidělování
Alokátor pro tuto neuspořádanou mapu.

_Začít
Pozice prvního prvku v oblasti prvků, které se mají zkopírovat.

_Konec
Pozice prvního prvku nad rozsah prvků, které se mají zkopírovat.

_Umap
Zdrojový concurrent_unordered_map objekt ke zkopírování nebo přesunutí prvků.

Poznámky

Všechny konstruktory ukládají objekt _Allocator alokátoru a inicializují neuspořádanou mapu.

První konstruktor určuje prázdnou počáteční mapu a explicitně určuje počet kbelíků, hashovací funkce, funkce rovnosti a typ alokátoru, které se mají použít.

Druhý konstruktor určuje alokátor pro neuspořádanou mapu.

Třetí konstruktor určuje hodnoty zadané rozsahem iterátoru [ _Begin, _End).

Čtvrtý a pátý konstruktor určuje kopii souběžné neuspořádané mapy _Umap.

Poslední konstruktor určuje přesunutí souběžné neuspořádané mapy _Umap.

count

Spočítá počet prvků odpovídajících zadanému klíči. Tato funkce je bezpečná pro souběžnost.

size_type count(const key_type& KVal) const;

Parametry

KVal
Klíč, který chcete vyhledat.

Vrácená hodnota

Počet výskytů klíče v kontejneru

empty

Zkouší, zda nejsou přítomny žádné prvky. Tato metoda je bezpečná pro souběžnost.

bool empty() const;

Vrácená hodnota

true pokud je souběžný kontejner prázdný, false jinak.

Poznámky

V případě souběžných vložení se může okamžitě po volání této funkce změnit, zda je souběžný kontejner prázdný, a to ještě před načtením návratové hodnoty.

end

Vrátí iterátor odkazující na umístění úspěšného posledního prvku v souběžnému kontejneru. Tato metoda je bezpečná pro souběžnost.

iterator end();

const_iterator end() const;

Vrácená hodnota

Iterátor do umístění úspěšného posledního prvku v souběžného kontejneru.

equal_range

Najde oblast, která odpovídá zadanému klíči. Tato funkce je bezpečná pro souběžnost.

std::pair<iterator,
    iterator> equal_range(
    const key_type& KVal);

std::pair<const_iterator,
    const_iterator> equal_range(
    const key_type& KVal) const;

Parametry

KVal
Hodnota klíče, kterou chcete vyhledat.

Vrácená hodnota

Dvojice, ve které je první prvek iterátorem na začátek a druhým prvkem je iterátor na konec rozsahu.

Poznámky

Souběžné vkládání může způsobit vložení dalších kláves za počáteční iterátor a před koncový iterátor.

find

Vyhledá prvek, který odpovídá zadanému klíči. Tato funkce je bezpečná pro souběžnost.

iterator find(const key_type& KVal);

const_iterator find(const key_type& KVal) const;

Parametry

KVal
Hodnota klíče, kterou chcete vyhledat.

Vrácená hodnota

Iterátor odkazující na umístění prvního prvku, který odpovídal zadanému klíči, nebo iterátoru end() , pokud takový prvek neexistuje.

get_allocator

Vrátí uložený objekt alokátoru pro tento souběžný kontejner. Tato metoda je bezpečná pro souběžnost.

allocator_type get_allocator() const;

Vrácená hodnota

Uložený objekt alokátoru pro tento souběžný kontejner.

hash_function

Získá uložený objekt hashovací funkce.

hasher hash_function() const;

Vrácená hodnota

Uložený objekt funkce hash.

insert

Přidá do objektu concurrent_unordered_map prvky.

std::pair<iterator,
    bool> insert(
    const value_type& value);

iterator insert(
    const_iterator _Where,
    const value_type& value);

template<class _Iterator>
void insert(_Iterator first,
    _Iterator last);

template<class V>
std::pair<iterator,
    bool> insert(
    V&& value);

template<class V>
typename std::enable_if<!std::is_same<const_iterator,
    typename std::remove_reference<V>::type>::value,
    iterator>::type insert(
    const_iterator _Where,
    V&& value);

Parametry

_Iterace
Typ iterátoru použitý pro vložení.

V
Typ hodnoty vložené do mapy.

value
Hodnota, která se má vložit.

_Kde
Počáteční umístění pro hledání kurzoru.

První
Začátek oblasti, která se má vložit.

Poslední
Konec oblasti, která se má vložit.

Vrácená hodnota

Pár obsahující iterátor a logickou hodnotu. Další podrobnosti najdete v části Poznámky.

Poznámky

První člen funkce určuje, zda prvek X existuje v sekvenci, jehož klíč má ekvivalentní řazení k prvku .value Pokud ne, vytvoří takový prvek X a inicializuje jej pomocí value. Funkce pak určí iterátor where , který určuje X. Pokud došlo k vložení, vrátí std::pair(where, true)funkce . V opačném případě se vrátí std::pair(where, false).

Druhá členová funkce vrátí hodnotu insert( value), která slouží _Where jako výchozí místo v řízené sekvenci k vyhledání místa vložení.

Třetí člen funkce vloží posloupnost hodnot prvků z rozsahu [ first, last).

Poslední dvě členské funkce se chovají stejně jako první dvě, s tím rozdílem, že value se používá k vytvoření vložené hodnoty.

key_eq

Získá uložený objekt funkce porovnání rovnosti.

key_equal key_eq() const;

Vrácená hodnota

Uložený objekt funkce porovnání rovnosti.

load_factor

Vypočítá a vrátí aktuální zátěžový faktor kontejneru. Faktor zatížení je počet prvků v kontejneru dělený počtem kbelíků.

float load_factor() const;

Vrácená hodnota

Faktor zatížení kontejneru.

max_load_factor

Získá nebo nastaví maximální zátěžový faktor kontejneru. Maximální zátěžový faktor je největší počet prvků, než může být v libovolném kontejneru předtím, než kontejner zvětší svou interní tabulku.

float max_load_factor() const;

void max_load_factor(float _Newmax);

Parametry

_Newmax

Vrácená hodnota

První členová funkce vrátí uložený maximální zátěžový faktor. Druhá členová funkce nevrací hodnotu, ale vyvolá výjimku out_of_range , pokud zadaný faktor zatížení není platný..

max_size

Vrátí maximální velikost souběžného kontejneru určeného alokátorem. Tato metoda je bezpečná pro souběžnost.

size_type max_size() const;

Vrácená hodnota

Maximální počet prvků, které lze vložit do tohoto souběžného kontejneru.

Poznámky

Tato horní mez hodnota může být ve skutečnosti vyšší než to, co kontejner může ve skutečnosti obsahovat.

operator[]

Vyhledá nebo vloží prvek se zadaným klíčem. Tato metoda je bezpečná pro souběžnost.

mapped_type& operator[](const key_type& kval);

mapped_type& operator[](key_type&& kval);

Parametry

KVal
Hodnota klíče

najít nebo vložit.

Vrácená hodnota

Odkaz na datovou hodnotu nalezeného nebo vloženého prvku.

Poznámky

Pokud není nalezena hodnota klíče argumentu, je vložen spolu s výchozí hodnotou datového typu.

operator[]lze použít k vložení prvků do mapy m pomocí , kde DataValue je hodnota mapped_type prvku s hodnotou keym[key] = DataValue;klíče .

Při použití operator[] k vložení prvků vrácený odkaz nezoznačuje, zda vložení mění existující prvek nebo vytváří nový. Členské funkce find a vložení lze použít k určení, zda prvek se zadaným klíčem již existuje před vložením.

operator=

Přiřadí obsah jiného concurrent_unordered_map objektu k tomuto objektu. Tato metoda není bezpečná pro souběžnost.

concurrent_unordered_map& operator= (const concurrent_unordered_map& _Umap);

concurrent_unordered_map& operator= (concurrent_unordered_map&& _Umap);

Parametry

_Umap
Zdrojový concurrent_unordered_map objekt.

Vrácená hodnota

Odkaz na tento concurrent_unordered_map objekt.

Poznámky

Po vymazání všech existujících prvků souběžný vektor operator= buď zkopíruje nebo přesune obsah _Umap do souběžného vektoru.

Předělávka

Znovu vytvoří hashovací tabulku.

void rehash(size_type _Buckets);

Parametry

_Kbelíky
Požadovaný počet kbelíků.

Poznámky

Členová funkce změní počet kbelíků tak, aby byla alespoň _Buckets aspoň a podle potřeby znovu sestaví tabulku hash. Počet kbelíků musí být mocnina 2. Pokud není mocnina 2, zaokrouhlí se nahoru na další největší mocninu 2.

Vyvolá výjimku out_of_range, pokud je počet kontejnerů neplatný (buď 0, nebo větší než maximální počet kbelíků).

size

Vrátí počet prvků v tomto souběžnému kontejneru. Tato metoda je bezpečná pro souběžnost.

size_type size() const;

Vrácená hodnota

Počet položek v kontejneru

Poznámky

V přítomnosti souběžných vložení se počet prvků v souběžného kontejneru může změnit hned po volání této funkce před načtením návratové hodnoty.

swap

Prohodí obsah dvou concurrent_unordered_map objektů. Tato metoda není bezpečná pro souběžnost.

void swap(concurrent_unordered_map& _Umap);

Parametry

_Umap
Objekt concurrent_unordered_map , se kterým se má prohodit.

unsafe_begin

Vrátí iterátor na první prvek v tomto kontejneru pro konkrétní kontejner.

local_iterator unsafe_begin(size_type _Bucket);

const_local_iterator unsafe_begin(size_type _Bucket) const;

Parametry

_Kbelík
Index kontejneru.

Vrácená hodnota

Iterátor, který ukazuje na začátek kontejneru.

unsafe_bucket

Vrátí index kontejneru, na který se v tomto kontejneru mapuje konkrétní klíč.

size_type unsafe_bucket(const key_type& KVal) const;

Parametry

KVal
Hledaný klíč prvku.

Vrácená hodnota

Index kontejneru pro klíč v tomto kontejneru.

unsafe_bucket_count

Vrátí aktuální počet kbelíků v tomto kontejneru.

size_type unsafe_bucket_count() const;

Vrácená hodnota

Aktuální počet kontejnerů v tomto kontejneru.

unsafe_bucket_size

Vrátí počet položek v konkrétním kontejneru tohoto kontejneru.

size_type unsafe_bucket_size(size_type _Bucket);

Parametry

_Kbelík
Kontejner, který chcete vyhledat.

Vrácená hodnota

Aktuální počet kontejnerů v tomto kontejneru.

unsafe_cbegin

Vrátí iterátor na první prvek v tomto kontejneru pro konkrétní kontejner.

const_local_iterator unsafe_cbegin(size_type _Bucket) const;

Parametry

_Kbelík
Index kontejneru.

Vrácená hodnota

Iterátor, který ukazuje na začátek kontejneru.

unsafe_cend

Vrátí iterátor do umístění úspěšného posledního prvku v konkrétním kontejneru.

const_local_iterator unsafe_cend(size_type _Bucket) const;

Parametry

_Kbelík
Index kontejneru.

Vrácená hodnota

Iterátor, který ukazuje na začátek kontejneru.

unsafe_end

Vrátí iterátor na poslední prvek v tomto kontejneru pro určitý kontejner.

local_iterator unsafe_end(size_type _Bucket);

const_local_iterator unsafe_end(size_type _Bucket) const;

Parametry

_Kbelík
Index kontejneru.

Vrácená hodnota

Iterátor ukazující na konec kontejneru.

unsafe_erase

Odebere prvky ze concurrent_unordered_map zadaných pozic. Tato metoda není bezpečná pro souběžnost.

iterator unsafe_erase(
    const_iterator _Where);

iterator unsafe_erase(
    const_iterator _Begin,
    const_iterator _End);

size_type unsafe_erase(
    const key_type& KVal);

Parametry

_Kde
Umístění iterátoru, ze které se má vymazat.

_Začít
Pozice prvního prvku v rozsahu prvků, které se mají vymazat.

_Konec
Pozice prvního prvku nad rozsah prvků, které se mají vymazat.

KVal
Hodnota klíče, kterou chcete vymazat.

Vrácená hodnota

První dvě členské funkce vrátí iterátor, který určí první prvek, který zůstane nad rámec všech odebraných prvků, nebo concurrent_unordered_map::end() pokud žádný takový prvek neexistuje. Třetí členová funkce vrátí počet prvků, které odebere.

Poznámky

První člen funkce odebere prvek řízené sekvence odkazované na _Where. Druhá členová funkce odebere prvky v oblasti [ _Begin, _End).

Třetí členová funkce odebere prvky v oblasti oddělené ( concurrent_unordered_map::equal_rangeKVal).

unsafe_max_bucket_count

Vrátí maximální počet kbelíků v tomto kontejneru.

size_type unsafe_max_bucket_count() const;

Vrácená hodnota

Maximální počet kbelíků v tomto kontejneru.

Viz také

concurrency – obor názvů
Paralelní kontejnery a objekty