Freigeben über


concurrent_unordered_map-Klasse

Die concurrent_unordered_map- Klasse ist ein parallelitätssicherer Container, mit dem eine Folge von Elementen variierender Länge des Typs std::pair<const K, _Element_type> gesteuert wird. Die Sequenz wird so dargestellt, dass parallelitätssichere Vorgänge für Anfügen, Elementzugriff, Iteratorzugriff und Iteratordurchläufe ermöglicht werden. Hier sind Parallelitätssichere Zeiger oder Iteratoren immer gültig. Es ist keine Garantie für die Elementinitialisierung oder eine bestimmte Traversalreihenfolge.

Syntax

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>>;

Parameter

K
Der Schlüsseltyp.

_Element_type
Der zugeordnete Typ.

_Hasher
Der Hashfunktionsobjekttyp. Dieses Argument ist optional, und der Standardwert ist std::hash<K>.

key_equality
Der Gleichheitsvergleich-Funktionsobjekttyp. Dieses Argument ist optional, und der Standardwert ist std::equal_to<K>.

_Allocator_type
Der Typ, der das gespeicherte Zuordnungsobjekt darstellt, das Details zur Zuordnung und zur Freigabe des Arbeitsspeichers für die gleichzeitige ungeordnete Zuordnung kapselt. Dieses Argument ist optional, und der Standardwert ist std::allocator<std::pair<K,_Element_type>>.

Member

Öffentliche Typedefs

Name Beschreibung
allocator_type Der Typ einer Zuweisung für die Speicherverwaltung.
const_iterator Der Typ eines konstanten Iterators für die gesteuerte Sequenz.
const_local_iterator Der Typ eines konstanten Bucketiterators für die gesteuerte Sequenz.
const_pointer Der Typ eines konstanten Zeigers auf ein Element.
const_reference Der Typ eines konstanten Verweises auf ein Element.
difference_type Der Typ eines Abstands mit Vorzeichen zwischen zwei Elementen.
hasher Der Typ der Hashfunktion.
iterator Der Typ eines Iterators für die gesteuerte Sequenz.
key_equal Der Typ der Vergleichsfunktion.
key_type Der Typ eines Sortierschlüssels.
local_iterator Der Typ eines Bucketiterators für die gesteuerte Sequenz.
mapped_type Der Typ eines zugeordneten Werts, der jedem Schlüssel zugeordnet ist.
pointer Der Typ eines Zeigers auf ein Element.
reference Der Typ eines Verweises auf ein Element.
size_type Der Typ eines Abstands ohne Vorzeichen zwischen zwei Elementen.
value_type Der Typ eines Elements.

Öffentliche Konstruktoren

Name Beschreibung
concurrent_unordered_map Überladen. Erstellt eine parallele ungeordneten Zuordnung.

Öffentliche Methoden

Name Beschreibung
at Überladen. Sucht ein Element in der concurrent_unordered_map mit einem angegebenen Schlüsselwert. Diese Methode ist nebenläufigkeitssicher.
hash_function Ruft das gespeicherte Hashfunktionsobjekt ab.
insert Überladen. Fügt dem concurrent_unordered_map-Objekt Elemente hinzu.
key_eq Ruft das gespeicherte Gleichheits-Vergleichsfunktionsobjekt ab.
swap Vertauscht den Inhalt von zwei concurrent_unordered_map-Objekten. Diese Methode ist nicht nebenläufigkeitssicher.
unsafe_erase Überladen. Entfernt Elemente aus der concurrent_unordered_map an angegebenen Positionen. Diese Methode ist nicht nebenläufigkeitssicher.

Öffentliche Operatoren

Name Beschreibung
operator[] Überladen. Sucht ein Element mit dem angegebenen Schlüssel oder fügt es ein. Diese Methode ist nebenläufigkeitssicher.
operator= Überladen. Weist den Inhalt eines anderen concurrent_unordered_map-Objekts diesem Objekt zu. Diese Methode ist nicht nebenläufigkeitssicher.

Hinweise

Ausführliche Informationen zur concurrent_unordered_map Klasse finden Sie unter Parallel Containers and Objects.

Vererbungshierarchie

_Traits

_Concurrent_hash

concurrent_unordered_map

Anforderungen

Kopfzeile: concurrent_unordered_map.h

Namespace: Parallelität

at

Sucht ein Element in der concurrent_unordered_map mit einem angegebenen Schlüsselwert. Diese Methode ist nebenläufigkeitssicher.

mapped_type& at(const key_type& KVal);

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

Parameter

KVal
Der Schlüsselwert, das gesucht werden soll.

Rückgabewert

Ein Verweis auf den Datenwert des gefundenen Elements.

Hinweise

Wenn der Argumentschlüsselwert nicht gefunden wird, löst die Funktion ein Objekt der out_of_range-Klasse aus.

begin

Gibt einen Iterator zurück, der auf das erste Element im gleichzeitigen Container zeigt. Diese Methode ist nebenläufigkeitssicher.

iterator begin();

const_iterator begin() const;

Rückgabewert

Ein Iterator für das erste Element im gleichzeitigen Container.

cbegin

Gibt einen Konst iterator zurück, der auf das erste Element im gleichzeitigen Container zeigt. Diese Methode ist nebenläufigkeitssicher.

const_iterator cbegin() const;

Rückgabewert

Ein Iterator für das erste Element im gleichzeitigen Container.

cend

Gibt einen Iterator zurück, der auf die Position zeigt, an der das letzte Element im gleichzeitigen Container erfolgreich war. Diese Methode ist nebenläufigkeitssicher.

const_iterator cend() const;

Rückgabewert

Ein Iterator für die Position, an der das letzte Element im gleichzeitigen Container erfolgreich war.

clear

Löscht alle Elemente im gleichzeitigen Container. Diese Funktion ist nicht parallel.

void clear();

concurrent_unordered_map

Erstellt eine parallele ungeordneten Zuordnung.

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);

Parameter

_Iterator
Der Typ des Eingabeiterators.

_Number_of_buckets
Die anfängliche Anzahl von Buckets für diese nicht angeordnete Zuordnung.

_Hasher
Die Hashfunktion für diese ungeordnete Zuordnung.

key_equality
Die Gleichheitsvergleichsfunktion für diese ungeordnete Zuordnung.

_Verteiler
Der Zuweisungsgeber für diese ungeordnete Karte.

_Anfangen
Die Position des ersten Elements in dem zu kopierenden Elementbereich.

_Ende
Die Position des ersten Elements nach dem zu kopierenden Elementbereich.

_Umap
Das concurrent_unordered_map-Quellobjekt, aus dem Elemente kopiert oder verschoben werden sollen.

Hinweise

Alle Konstruktoren speichern ein Allocator-Objekt _Allocator und initialisieren die ungeordnete Zuordnung.

Der erste Konstruktor gibt eine leere anfängliche Zuordnung an und gibt explizit die Anzahl der zu verwendenden Buckets, Hashfunktion, Gleichheitsfunktion und allocator-Typ an.

Der zweite Konstruktor gibt einen Allocator für die ungeordnete Zuordnung an.

Der dritte Konstruktor gibt werte an, die vom Iteratorbereich [ _Begin, ). _End

Der vierte und fünfte Konstruktor geben eine Kopie der gleichzeitigen ungeordneten Zuordnung _Umapan.

Der letzte Konstruktor gibt eine Verschiebung der gleichzeitigen ungeordneten Zuordnung _Umapan.

count

Zählt die Anzahl der Elemente, die einem angegebenen Schlüssel entsprechen. Diese Funktion ist parallel.

size_type count(const key_type& KVal) const;

Parameter

KVal
Der zu suchende Schlüssel.

Rückgabewert

Die Häufigkeit, mit der der Schlüssel im Container angezeigt wird.

empty

Testet, ob keine Elemente vorhanden sind. Diese Methode ist nebenläufigkeitssicher.

bool empty() const;

Rückgabewert

true wenn der gleichzeitige Container leer ist, false andernfalls.

Hinweise

Wenn gleichzeitige Einfügungen vorhanden sind oder nicht, kann sich der gleichzeitige Container unmittelbar nach dem Aufrufen dieser Funktion ändern, bevor der Rückgabewert sogar gelesen wird.

end

Gibt einen Iterator zurück, der auf die Position zeigt, an der das letzte Element im gleichzeitigen Container erfolgreich war. Diese Methode ist nebenläufigkeitssicher.

iterator end();

const_iterator end() const;

Rückgabewert

Ein Iterator an die Position, an der das letzte Element im gleichzeitigen Container erfolgreich war.

equal_range

Sucht einen Bereich, der einem angegebenen Schlüssel entspricht. Diese Funktion ist parallel.

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

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

Parameter

KVal
Der Schlüsselwert, nach dem gesucht werden soll.

Rückgabewert

Ein Paar , bei dem das erste Element ein Iterator für den Anfang ist und das zweite Element ein Iterator am Ende des Bereichs ist.

Hinweise

Es ist möglich, dass gleichzeitige Einfügungen dazu führen, dass zusätzliche Schlüssel nach dem Start iterator und vor dem End iterator eingefügt werden.

find

Sucht ein Element, das einem angegebenen Schlüssel entspricht. Diese Funktion ist parallel.

iterator find(const key_type& KVal);

const_iterator find(const key_type& KVal) const;

Parameter

KVal
Der Schlüsselwert, nach dem gesucht werden soll.

Rückgabewert

Ein Iterator, der auf die Position des ersten Elements zeigt, das mit dem bereitgestellten Schlüssel übereinstimmt, oder der Iterator end() , wenn kein solches Element vorhanden ist.

get_allocator

Gibt das gespeicherte Zuweisungsobjekt für diesen gleichzeitigen Container zurück. Diese Methode ist nebenläufigkeitssicher.

allocator_type get_allocator() const;

Rückgabewert

Das gespeicherte Zuweisungsobjekt für diesen gleichzeitigen Container.

hash_function

Ruft das gespeicherte Hashfunktionsobjekt ab.

hasher hash_function() const;

Rückgabewert

Das gespeicherte Hashfunktionsobjekt.

insert

Fügt dem concurrent_unordered_map-Objekt Elemente hinzu.

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);

Parameter

_Iterator
Der zum Einfügen verwendete Iteratortyp.

V
Der Typ des in die Karte eingefügten Werts.

value
Der einzufügende Wert.

_Wo
Die Startposition, an der nach einer Einfügemarke gesucht werden soll.

first
Der Anfang des einzufügenden Bereichs.

last
Das Ende des einzufügenden Bereichs.

Rückgabewert

Ein Paar, das einen Iterator und einen booleschen Wert enthält. Weitere Details finden Sie im Abschnitt „Anmerkungen“.

Hinweise

Die erste Memberfunktion bestimmt, ob ein Element X in der Sequenz vorhanden ist, deren Schlüssel die entsprechende Reihenfolge aufweist.value Andernfalls erstellt es ein solches Element X und initialisiert es mit value. Die Funktion bestimmt dann den Iterator where , der X angibt. Wenn eine Einfügung erfolgt ist, wird die Funktion zurückgegeben std::pair(where, true). Andernfalls wird std::pair(where, false)zurückgegeben.

Die zweite Memberfunktion gibt insert( ) zurück, valuewobei _Where als Ausgangspunkt innerhalb der gesteuerten Sequenz nach der Einfügemarke gesucht wird.

Die dritte Memberfunktion fügt die Abfolge von Elementwerten aus dem Bereich [ first, ). last

Die letzten beiden Memberfunktionen verhalten sich genauso wie die ersten beiden, mit der Ausnahme, dass value zum Konstruieren des eingefügten Werts verwendet wird.

key_eq

Ruft das gespeicherte Gleichheits-Vergleichsfunktionsobjekt ab.

key_equal key_eq() const;

Rückgabewert

Das gespeicherte Gleichheitsvergleichsfunktionsobjekt.

load_factor

Berechnet und gibt den aktuellen Ladefaktor des Containers zurück. Der Ladefaktor ist die Anzahl der Elemente im Container dividiert durch die Anzahl der Buckets.

float load_factor() const;

Rückgabewert

Der Ladefaktor für den Container.

max_load_factor

Dient zum Abrufen oder Festlegen des maximalen Ladefaktors des Containers. Der maximale Ladefaktor ist die größte Anzahl von Elementen, als in jedem Bucket enthalten sein kann, bevor der Container seine interne Tabelle wächst.

float max_load_factor() const;

void max_load_factor(float _Newmax);

Parameter

_Newmax

Rückgabewert

Die erste Memberfunktion gibt den gespeicherten maximalen Lastfaktor zurück. Die zweite Memberfunktion gibt keinen Wert zurück, löst jedoch eine out_of_range Ausnahme aus, wenn der angegebene Ladefaktor ungültig ist.

max_size

Gibt die maximale Größe des gleichzeitigen Containers zurück, die vom Allocator bestimmt wird. Diese Methode ist nebenläufigkeitssicher.

size_type max_size() const;

Rückgabewert

Die maximale Anzahl von Elementen, die in diesen gleichzeitigen Container eingefügt werden können.

Hinweise

Dieser obere Begrenzungswert kann tatsächlich höher sein als das, was der Container tatsächlich enthalten kann.

operator[]

Sucht ein Element mit dem angegebenen Schlüssel oder fügt es ein. Diese Methode ist nebenläufigkeitssicher.

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

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

Parameter

KVal
Der Schlüsselwert für

suchen oder einfügen.

Rückgabewert

Ein Verweis auf den Datenwert des gefundenen oder eingefügten Elements.

Hinweise

Wenn der Argumentschlüsselwert nicht gefunden wird, wird er zusammen mit dem Standardwert des Datentyps eingefügt.

operator[] kann verwendet werden, um Elemente in eine Karte m einzufügen, m[key] = DataValue;wobei DataValue der Wert des mapped_type Elements mit einem Schlüsselwert von key.

Wenn operator[] zum Einfügen von Elementen verwendet wird, gibt der zurückgegebene Verweis nicht an, ob eine Einfügung ein bereits vorhandenes Element ändert oder ein neues erstellt. Die Memberfunktionen find und das Einfügen können verwendet werden, um zu bestimmen, ob ein Element mit einer angegebenen Taste bereits vor der Einfügung vorhanden ist.

operator =

Weist den Inhalt eines anderen concurrent_unordered_map-Objekts diesem Objekt zu. Diese Methode ist nicht nebenläufigkeitssicher.

concurrent_unordered_map& operator= (const concurrent_unordered_map& _Umap);

concurrent_unordered_map& operator= (concurrent_unordered_map&& _Umap);

Parameter

_Umap
Das concurrent_unordered_map-Quellobjekt.

Rückgabewert

Ein Verweis auf das concurrent_unordered_map-Objekt.

Hinweise

Nach dem Löschen vorhandener Elemente wird ein gleichzeitiger Vektor operator= kopiert oder der Inhalt _Umap in den gleichzeitigen Vektor verschoben.

Aufbereitung

Erstellt die Hashtabelle neu.

void rehash(size_type _Buckets);

Parameter

_Eimer
Die gewünschte Anzahl von Buckets.

Hinweise

Die Memberfunktion ändert die Anzahl der Buckets in mindestens _Buckets und erstellt ggf. die Hashtabelle neu. Die Anzahl der Buckets muss eine Leistung von 2 sein. Wenn keine Potenz von 2, wird sie auf die nächste größte Potenz von 2 aufgerundet.

Es löst eine out_of_range Ausnahme aus, wenn die Anzahl der Buckets ungültig ist (entweder 0 oder größer als die maximale Anzahl von Buckets).

size

Gibt die Anzahl der Elemente in diesem gleichzeitigen Container zurück. Diese Methode ist nebenläufigkeitssicher.

size_type size() const;

Rückgabewert

Die Anzahl der Elemente im Container.

Hinweise

Wenn gleichzeitige Einfügungen vorhanden sind, kann sich die Anzahl der Elemente im gleichzeitigen Container unmittelbar nach dem Aufruf dieser Funktion ändern, bevor der Rückgabewert sogar gelesen wird.

swap

Vertauscht den Inhalt von zwei concurrent_unordered_map-Objekten. Diese Methode ist nicht nebenläufigkeitssicher.

void swap(concurrent_unordered_map& _Umap);

Parameter

_Umap
Das concurrent_unordered_map zu tauschende Objekt.

unsafe_begin

Gibt einen Iterator an das erste Element in diesem Container für einen bestimmten Bucket zurück.

local_iterator unsafe_begin(size_type _Bucket);

const_local_iterator unsafe_begin(size_type _Bucket) const;

Parameter

_Eimer
Der Bucketindex.

Rückgabewert

Ein Iterator, der auf den Anfang des Buckets zeigt.

unsafe_bucket

Gibt den Bucketindex zurück, dem ein bestimmter Schlüssel in diesem Container zugeordnet ist.

size_type unsafe_bucket(const key_type& KVal) const;

Parameter

KVal
Der Elementschlüssel, nach dem gesucht wird.

Rückgabewert

Der Bucketindex für den Schlüssel in diesem Container.

unsafe_bucket_count

Gibt die aktuelle Anzahl der Buckets in diesem Container zurück.

size_type unsafe_bucket_count() const;

Rückgabewert

Die aktuelle Anzahl der Buckets in diesem Container.

unsafe_bucket_size

Gibt die Anzahl der Elemente in einem bestimmten Bucket dieses Containers zurück.

size_type unsafe_bucket_size(size_type _Bucket);

Parameter

_Eimer
Der Bucket, nach dem gesucht werden soll.

Rückgabewert

Die aktuelle Anzahl der Buckets in diesem Container.

unsafe_cbegin

Gibt einen Iterator an das erste Element in diesem Container für einen bestimmten Bucket zurück.

const_local_iterator unsafe_cbegin(size_type _Bucket) const;

Parameter

_Eimer
Der Bucketindex.

Rückgabewert

Ein Iterator, der auf den Anfang des Buckets zeigt.

unsafe_cend

Gibt einen Iterator an die Position zurück, an der das letzte Element in einem bestimmten Bucket erfolgreich war.

const_local_iterator unsafe_cend(size_type _Bucket) const;

Parameter

_Eimer
Der Bucketindex.

Rückgabewert

Ein Iterator, der auf den Anfang des Buckets zeigt.

unsafe_end

Gibt einen Iterator an das letzte Element in diesem Container für einen bestimmten Bucket zurück.

local_iterator unsafe_end(size_type _Bucket);

const_local_iterator unsafe_end(size_type _Bucket) const;

Parameter

_Eimer
Der Bucketindex.

Rückgabewert

Ein Iterator, der auf das Ende des Buckets zeigt.

unsafe_erase

Entfernt Elemente aus der concurrent_unordered_map an angegebenen Positionen. Diese Methode ist nicht nebenläufigkeitssicher.

iterator unsafe_erase(
    const_iterator _Where);

iterator unsafe_erase(
    const_iterator _Begin,
    const_iterator _End);

size_type unsafe_erase(
    const key_type& KVal);

Parameter

_Wo
Die Position des Iterators, an der gelöscht werden soll.

_Anfangen
Die Position des ersten Elements im Bereich der zu löschenden Elemente.

_Ende
Die Position des ersten Elements über den Bereich der zu löschenden Elemente hinaus.

KVal
Der Schlüsselwert, der gelöscht werden soll.

Rückgabewert

Die ersten beiden Memberfunktionen geben einen Iterator zurück, der das erste Element festlegt, das länger als alle anderen entfernten Elementen verbleibt, oder er gibt concurrent_unordered_map::end() zurück, wenn kein solches Element vorhanden ist. Die dritte Memberfunktion gibt die Anzahl von Elementen zurück, die sie entfernt.

Hinweise

Die erste Memberfunktion entfernt das Element der kontrollierten Sequenz, auf die _Whereverwiesen wird. Die zweite Memberfunktion entfernt die Elemente im Bereich [ _Begin, _End).

Die dritte Memberfunktion entfernt die Elemente im Bereich, der durch concurrent_unordered_map::equal_range(KVal) getrennt ist.

unsafe_max_bucket_count

Gibt die maximale Anzahl von Buckets in diesem Container zurück.

size_type unsafe_max_bucket_count() const;

Rückgabewert

Die maximale Anzahl von Buckets in diesem Container.

Siehe auch

Concurrency-Namespace
Parallele Container und Objekte