Einzigartige und bestellte Behälter in C ++

Einzigartige und bestellte Behälter in C ++
6, 10, 2, 8, 4 ist ein Satz; 2, 4, 6, 8, 10 ist ein Satz derselben Ganzzahlen, die in aufsteigender Reihenfolge angeordnet sind. In Mathematik hat ein Set einzigartige Elemente (verschiedene Elemente), und das heißt, kein Element tritt mehr als einmal auf. Darüber hinaus ist ein Multiset ein Satz, bei dem ein Element mehr als einmal auftreten kann. 6, 6, 10, 2, 2, 8, 4, 4, 4 ist ein Multiset. 2, 2, 4, 4, 4, 6, 6, 8, 10 ist das gleiche Multiset, aber mit den Elementen, die in aufsteigender Reihenfolge angeordnet sind. Dieser Artikel befasst sich nicht mit Multiset. Es befasst sich mit der C ++ - Datenstruktur, die aufgerufen wurde, festgelegt.

Eine Karte in Software ist wie ein Array, aber es ist ein Array mit zwei Spalten anstelle von einem. Die erste Spalte hat die Tasten und die zweite Spalte die Werte. Jede Zeile ist ein Paar, das ein Schlüssel-/Wertpaar erstellt. Ein Schlüssel steht in direktem Zusammenhang mit seinem Wert.

Ein Beispiel für eine Karte ist 'C', 30, 'B', 20, 'D', 30, 'e', 40, 'a', 10. Das erste hier eingefügte Schlüssel-/Wertpaar ist 'c', 3, wobei 'C' der Schlüssel ist und 30 der Wert ist. Diese Karte wird nicht von Schlüssel bestellt. Bestellung dieser Karte nach Keys erzeugt 'a', 10, 'b', 20, 'c', 30, 'd', 30, 'e', 40. Beachten Sie, dass es doppelte Werte geben kann, aber nicht doppelte Schlüssel. Eine bestellte Karte ist eine von Schlüssel bestellte Karte.

Ein Multiset ist zu einem Satz, da ein Multimap zu einer Karte ist. Dies bedeutet, dass es Karten mit doppelten Schlüssel gibt. Ein Beispiel für ein Multimap ist 'a', 10, 'b', 20, 'b', 20, 'c', 30, 'c', 30, 'D. ', 30, ' e ', 40. Und wie oben erwähnt, befasst sich dieser Artikel nicht mit Multimap, sondern es handelt.

In C ++ ist eine Datenstruktur eine Struktur mit Eigenschaften (Datenmitgliedern) und Methoden (Mitgliederfunktionen). Die Daten der Struktur sind eine Liste; Ein Set ist eine Liste; Eine Karte ist eine Liste der Schlüssel-/Wertpaare.

In diesem Artikel werden die Grundlagen von Sätzen und Karten in C ++ erörtert. Um diesen Artikel besser zu verstehen, hätte der Leser ein Grundkenntnis von C haben sollen++.

Artikelinhalt:

  • Klasse und seine Objekte
  • Erstellen eines Satzes oder einer Karte
  • Iterator -Grundlagen
  • Elementzugriff für Set und Karte
  • Reihenfolge der Elemente in einem Satz oder einer Karte
  • Andere häufig verwendete Mitgliederfunktionen
  • Abschluss

Klasse und seine Objekte:

In C ++ werden die Menge, die Karte und andere ähnliche Strukturen als Behälter bezeichnet. Eine Klasse ist eine verallgemeinerte Einheit mit Datenmitgliedern, die Variablen und Mitgliedsfunktionen sind, die verwandt sind. Wenn Datenmitglieder Werte erhalten, wird ein Objekt gebildet. Ein Objekt wird jedoch in einem als so genannten Prozess, Instanziierung, gebildet. Da eine Klasse zu unterschiedlichen Werten für dieselben Datenelementvariablen führen kann, können dann verschiedene Objekte aus derselben Klasse instanziiert werden.

In C ++ ist ein unbrauchbarer Satz eine Klasse sowie eine unbrauchbare Karte. Wenn ein Objekt aus dem unbrauchbaren Satz oder der unbrauchbaren Karte instanziiert wird, wird das Objekt zur realen Datenstruktur. Mit den SET- und MAP -Datenstrukturen ist das Hauptdatenelement eine Liste. Nun, das Set und die Karte bilden eine Gruppe von Containern, die genannt werden, assoziative Container. Es gibt auch ungeordnetes Set und die ungeordnete Karte, aber diese werden in diesem Artikel leider nicht behandelt.

Erstellen eines Satzes oder einer Karte:

Das Instantieren eines Satzes aus seiner Set -Klasse erstellt einen Satz. Das Instanziieren einer Karte aus ihrer Kartenklasse erstellt eine Karte. Das so erstellte Objekt erhält einen Namen der Wahl des Programmierers.

Um ein Set zu erstellen, sollte das Programm mit:

#enthalten
#enthalten
Verwenden von Namespace STD;

Beachten Sie die Richtlinie "#include", die die festgelegte Bibliothek enthält, in der die festgelegte Klasse festgelegt ist, aus der die festgelegten Datenstrukturen instanziiert werden.

Um eine Karte zu erstellen, sollte das Programm mit:

#enthalten
#enthalten
Verwenden von Namespace STD;

Beachten Sie die Richtlinie "#include", die die Kartenbibliothek enthält, in der die Kartenklasse enthält, aus der Kartendatenstrukturen instanziiert werden.

Die Syntax zum Erstellen eines leeren Satzes lautet:

Satz Objektname

Beispiel:

Satz setObj;

Ein Beispiel zum Erstellen eines Sets mit Inhalten ist:

Satz setObj (6, 10, 2, 8, 4);

Die Syntax zum Erstellen einer leeren Karte lautet:

Karte Objektname

Beispiel:

Karte Mapobj;

Ein Beispiel zum Erstellen einer Karte mit Inhalten ist:

Karte mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);

Iterator -Grundlagen:

Ein Iterator ist ein ausgefeilter Zeiger, mit dem die Liste der Datenstruktur vom Anfang bis zum Ende durchquert werden kann.

Die Function () Mitgliedsfunktion

Die Funktion "begin () Mitgliedsfunktion gibt einen Iterator zurück, der auf das erste Element der Liste verweist. Das folgende Beispiel zeigt dies für den Satz:

Satz setObj (6, 10, 2, 8, 4);
Satz:: iterator iter = setObj.Start();
Cout << *iter << '\n';

Beachten Sie, wie begin () mit SetObj und dem DOT -Operator verwendet wurde. Iter ist das zurückgegebene Iteratorobjekt. Beachten Sie auch, wie es deklariert wurde. * Ist der Indirektionoperator. Wie bei ITER verwendet, gibt es das erste Element des Satzes zurück; Das erste Element ist 2 anstelle von 6 - siehe Erklärung unten.

Das folgende Beispiel veranschaulicht die Verwendung der Funktion "begin () für die Karte:

Karte mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
Karte:: iterator iter = mapobj.Start();
Cout << "" << (*iter).first <<',' << (*iter).second << "\n";

Beachten. Iter ist das zurückgegebene Iteratorobjekt. Beachten Sie auch, wie es deklariert wurde. "First", wie hier verwendet, bezieht sich auf den Schlüssel. "Zweiter" bezieht sich auf den Wert, der dem Schlüssel entspricht. Beachten Sie, wie sie mit ITER verwendet wurden, um die Startelementkomponenten der Liste zu erhalten. Das erste Element ist a, 10 anstelle von c, 30 - siehe Erläuterung unten.

Die Mitgliedsfunktion „begin () const“

Die Mitgliedsfunktion „Beginn () const“ gibt einen Iterator zurück, der auf das erste Element der Liste hinweist, wenn die Erklärung des Satzes mit const beginnt (für Konstante). Unter dieser Bedingung kann der Wert in der Liste, auf die der zurückgegebene Iterator verwiesen wird, vom Iterator nicht geändert werden. Das folgende Beispiel zeigt die Verwendung für den Satz:

const set setObj (6, 10, 2, 8, 4);
Satz:: const_iterator iter = setObj.Start();
Cout << *iter << '\n';

Beachten Sie, wie begin () mit SetObj und dem DOT -Operator verwendet wurde. Kein nach Beginn wurde kein „const“ tippt (). "Const" hat der Erklärung jedoch vorausgegangen. Iter hier ist das zurückgegebene konstante Iteratorobjekt, das sich vom normalen Iterator unterscheidet. Beachten Sie auch, wie es deklariert wurde. * ist der Indirektionoperator; Wie bei ITER verwendet, gibt es das erste Element des Satzes zurück. Das erste Element ist 2 anstelle von 6 - siehe Erklärung unten.

Das folgende Beispiel zeigt die Verwendung der Funktion „begin () const“ für die Karte:

const map mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
Karte:: const_iterator iter = mapobj.Start();
Cout << "" << (*iter).first <<',' << (*iter).second << "\n";

Beachten. Kein nach Beginn wurde kein „const“ tippt (). "Const" hat der Erklärung jedoch vorausgegangen. Iter hier ist das zurückgegebene konstante Iteratorobjekt, das sich vom normalen Iterator unterscheidet. Beachten Sie auch, wie es deklariert wurde. "First", wie hier verwendet, bezieht sich auf den Schlüssel; "Zweitens" bezieht sich auf den Wert, der dem Schlüssel entspricht. Beachten Sie, wie sie mit ITER verwendet wurden, um die Startelementkomponenten der Liste zu erhalten. Das erste Element ist a, 10 anstelle von c, 30 - siehe Erläuterung unten.

Die ende () Mitgliedsfunktion

Die Funktion End () Member gibt einen Iterator zurück, der kurz nach dem Ende der Liste zeigt. Das folgende Beispiel zeigt dies für den Satz:

Satz setObj (6, 10, 2, 8, 4);
Satz:: iterator iter = setObj.Ende();
Cout << *iter << '\n';

Beachten Sie, wie End () mit SetObj und dem DOT -Operator verwendet wurde. Iter ist das zurückgegebene Iteratorobjekt. Beachten Sie auch, wie es deklariert wurde. * ist der Indirektionoperator; Wie bei ITER verwendet, gibt es das letzte+1 -Element des Satzes zurück. Auf dem Computer des Autors ist dieses letzte+1 -Element 5, was nicht auf der Liste steht. Achten Sie also darauf, dieses Element nicht zu verwenden.

Das folgende Beispiel zeigt die Verwendung der Funktion end () für die Karte:

Karte mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
Karte:: iterator iter = mapobj.Ende();
Cout << "" << (*iter).first <<',' << (*iter).second << "\n";

Beachten Sie, wie End () mit Mapobj und dem DOT -Operator verwendet wurde. Iter ist das zurückgegebene Iteratorobjekt. Beachten Sie auch, wie es deklariert wurde. * ist der Indirektionoperator; Wie bei ITER verwendet, gibt es das letzte+1 -Element der Karte zurück. Auf dem Computer des Autors ist dieses letzte+1 -Element , 0, das sich nicht in der Liste befindet. Achten Sie also darauf, dieses Element nicht zu verwenden.

Die Mitgliedsfunktion „End () const“

Die Member -Funktion „End () const“ gibt einen Iterator zurück, der kurz nach dem Ende der Liste zeigt, wenn die Erklärung des Satzes mit const beginnt (für Konstante). Unter dieser Bedingung kann der Wert in der Liste, auf die der zurückgegebene Iterator verwiesen wird, vom Iterator nicht geändert werden. Das folgende Beispiel zeigt die Verwendung für den Satz:

const set setObj (6, 10, 2, 8, 4);
Satz:: const_iterator iter = setObj.Ende();
Cout << *iter << '\n';

Beachten Sie, wie End () mit SetObj und dem DOT -Operator verwendet wurde. Kein „const“ wurde kurz nach dem Ende tippt (). "Const" hat der Erklärung jedoch vorausgegangen. Iter ist das zurückgegebene Iteratorobjekt. Beachten Sie auch, wie es deklariert wurde. * ist der Indirektionoperator; Wie bei ITER verwendet, gibt es das letzte+1 -Element des Satzes zurück.

Das folgende Beispiel zeigt die Verwendung der Funktion „End () const“ für die Karte:

const map mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
Karte:: const_iterator iter = mapobj.Ende();
Cout << "" << (*iter).first <<',' << (*iter).second << "\n";

Beachten Sie, wie End () mit Mapobj und dem DOT -Operator verwendet wurde. Kein „const“ wurde kurz nach dem Ende tippt (). "Const" hat der Erklärung jedoch vorausgegangen. Iter ist das zurückgegebene konstante Iteratorobjekt, das sich vom normalen Iterator unterscheidet. Beobachten Sie auch sorgfältig, wie es deklariert wurde.

Elementzugriff für Set und Karte:

Satz

Mit dem Satz wird das Element mit dem Indirektionoperator gelesen. Die ersten beiden Elemente eines Sets werden im folgenden Beispiel gelesen:

Satz setObj (6, 10, 2, 8, 4);
Satz:: iterator iter = setObj.Start();
Cout << *iter << '\n';
++Iter;
Cout << *iter << '\n';

Die Ausgabe ist 2, dann gefolgt von 4 - siehe Erläuterung unten. Um auf das nächste Element der Liste zu zeigen, wird der Iterator inkrementiert.

HINWEIS: Ein Element kann mit dem Indirektionoperator für den Satz nicht geändert werden. Zum Beispiel "*iter = 9;" Ist nicht möglich.

Karte

Eine Karte besteht aus Schlüssel-/Wertpaaren. Ein Wert kann mit dem entsprechenden Schlüssel gelesen und unter Verwendung desselben Schlüssels geändert werden. Das folgende Codesegment zeigt dies:

Karte mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
Cout << mapObj['b'] << '\n';
MAPOBJ ['B'] = 55;
Cout << mapObj['b'] << '\n';

Die Ausgabe ist:

20
55

Der Punktbetreiber wurde hier nicht verwendet. Stattdessen ist es der Square Brackets -Operator, der den Schlüssel als Inhalt nimmt, der verwendet wurde.

Reihenfolge der Elemente in einem Satz oder einer Karte:

Elemente können in beliebiger Reihenfolge in einen Satz eingefügt werden. Nach dem Einsetzen ordnet der Satz seine Elemente jedoch in aufsteigender Reihenfolge um. Aufsteigere Reihenfolge ist die Standardauftrag. Wenn die absteigende Reihenfolge benötigt wird, muss das Set wie im folgenden Beispiel deklariert werden:

Satz > setObj (6, 10, 2, 8, 4);

Also nach dem Typ e.G., Int, für die Vorlage gibt es ein Komma, gefolgt von „größerer“ in den Winkelklammern.

Elemente können in beliebiger Reihenfolge in eine Karte eingefügt werden. Sobald die Karte eingeführt wurde. Aufsteigerer Reihenfolge ist die Standardauftrag; Wenn absteigender Reihenfolge erforderlich ist, muss die Karte wie im folgenden Beispiel deklariert werden:

Karte > mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);

Also nach dem Typpaar e.G., "Char, int", für die Vorlage gibt es ein Komma, gefolgt von "größer" in den Winkelklammern.

Ein Set durchqueren

Die während der Schleife oder zum Schleifen mit dem Iterator kann verwendet werden, um einen Satz zu durchqueren. Das folgende Beispiel verwendet eine für die Schleife, um einen Satz zu durchqueren, der in absteigender Reihenfolge konfiguriert wurde:

Satz > setObj (6, 10, 2, 8, 4);
für (set:: iterator iter = setObj.Start(); Iter != setObj.Ende(); ++ iter)

Cout << *iter << ";

Die Ausgabe ist:

10 8 6 4 2

Das Inkrementieren eines Iterators zeigt es auf das nächste Element.

Eine Karte durchqueren

Die während der Schleife oder zum Schleifen mit dem Iterator kann verwendet werden, um eine Karte zu durchqueren. Das folgende Beispiel verwendet eine für die Schleife, um eine Karte zu durchqueren, die in absteigender Reihenfolge konfiguriert wurde:

Karte > mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
für (Karte:: iterator iter = mapobj.Start(); Iter != MAPOBJ.Ende(); ++ iter)

Cout << "" << (*iter).first << ", " << (*iter).second << "" << ", ";

Die Ausgabe ist:

e, 40, d, 30, c, 30, b, 20, a, 10,

Das Inkrementieren eines Iterators zeigt es auf das nächste Element. "First" bezieht sich im Code auf den Schlüssel und "zweitens" bezieht sich auf den entsprechenden Wert. Beachten Sie, wie diese Werte für den Ausgang erhalten wurden.

Andere häufig verwendete Mitgliederfunktionen:

Die size () -Funktion

Diese Funktion gibt eine Ganzzahl zurück, die die Anzahl der Elemente in der Liste ist. Setzen Sie Beispiel:

Satz > setObj (6, 10, 2, 8, 4);
Cout << setObj.size() << '\n';

Der Ausgang ist 5.

Karte Beispiel:

Karte > mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
Cout << mapObj.size() << '\n';

Der Ausgang ist 5.

Die Funktion Insert ()

Satz

Set erlaubt kein Duplikat. So wird jedes eingebrachte Duplikat lautlos abgelehnt. Mit dem Satz ist das Argument für die Funktion Insert () der zu fixierende Wert. Der Wert wird in eine Position eingebaut, in der die Reihenfolge im Set aufsteigend oder absteig. Beispiel:

Satz setObj (6, 10, 2, 8, 4);
setobj.Einfügen (6);
setobj.Einfügen (9);
setobj.Einfügen (12);
für (set:: iterator iter = setObj.Start(); Iter != setObj.Ende(); ++ iter)

Cout << *iter << ";

Die Ausgabe ist:

2 4 6 8 9 10 12

HINWEIS: Die Funktion Insert () kann verwendet werden, um einen leeren Satz zu füllen.

Karte

Die Karte erlaubt kein Duplikat nach Schlüssel. So wird jedes eingebrachte Duplikat lautlos abgelehnt. Mit der Karte ist das Argument zur Funktion Insert () das Schlüssel/Wert -Paar in Klammern. Das Element wird von der Taste in eine Position eingebaut. Beispiel:

Karte mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
Mapobj.insert ('e', 80);
Mapobj.insert ('f', 50);
Mapobj.insert ('g', 60);
für (Karte:: iterator iter = mapobj.Start(); Iter != MAPOBJ.Ende(); ++ iter)
Cout << "" << (*iter).first << ", " << (*iter).second << "" << ", ";

Die Ausgabe ist:

a, 10, b, 20, c, 30, d, 30, e, 40, f, 50, g, 60,

HINWEIS: Die Funktion Insert () kann verwendet werden, um eine leere Karte zu füllen.

Die leere () -Funktion

Diese Funktion gibt true zurück, wenn die Liste leer ist, und wenn anders falsch ist. Setzen Sie Beispiel:

Satz setObj (6, 10, 2, 8, 4);
bool ret = setObj.leer();
Cout << ret << '\n';

Die Ausgabe ist 0 für false, was bedeutet, dass das hier nicht leer ist.

Karte Beispiel:

Karte mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
bool ret = mapobj.leer();
Cout << ret << '\n';

Die Ausgabe ist 0 für False, was bedeutet, dass die Karte hier nicht leer ist.

Die Funktion erase ()

Satz

Betrachten Sie das folgende Codesegment:

Satz setObj (10, 20, 30, 40, 50);
Satz:: iterator iter = setObj.Start();
Satz:: iterator itr = setObj.löschen (iter);
Cout << "new size: " << setObj.size() << '\n';
Cout << "next value: " << *itr << '\n';
itr = setObj.löschen (ITR);
Cout << "new size: " << setObj.size() << '\n';
Cout << "next value: " << *itr << '\n';

Die Ausgabe ist:

Neue Größe: 4
Nächster Wert: 20
Neue Größe: 3
Nächster Wert: 30

Die Funktion erase () nimmt einen Iterator, der auf ein Element als Argument hinweist. Nach dem Löschen des Elements gibt die Funktion ERase () einen Iterator zurück, der auf das nächste Element verweist.

Karte

Betrachten Sie das folgende Codesegment:

Karte mapObj ('a', 10, 'b', 20, 'c', 30, 'd', 40, 'e', 50);
Karte:: iterator iter = mapobj.Start();
Karte:: iterator itr = mapobj.löschen (iter);
Cout << "new size: " << mapObj.size() << '\n';
Cout << "next value pair: " << (*itr).first <<',' << (*itr).second << "\n";
itr = mapobj.löschen (ITR);
Cout << "new size: " << mapObj.size() << '\n';
Cout << "next value pair: " << (*itr).first <<',' << (*itr).second << "\n";

Die Ausgabe ist:

Neue Größe: 4
Nächstes Wertpaar: B, 20
Neue Größe: 3
Nächstes Wertpaar: c, 30

Die Funktion erase () nimmt einen Iterator, der auf ein Element als Argument hinweist. Nach dem Löschen des Elements gibt die Funktion ERase () einen Iterator zurück, der auf das nächste Element verweist.

Die Funktion clear ()

Die Funktion clear () entfernt alle Elemente in der Liste. Setzen Sie Beispiel:

Satz setObj (6, 10, 2, 8, 4);
setobj.klar();
Cout << setObj.size() << '\n';

Die Ausgabe ist 0.

Karte Beispiel:

Karte mapObj ('c', 30, 'b', 20, 'd', 30, 'e', 40, 'a', 10);
Mapobj.klar();
Cout << mapObj.size() << '\n';

Die Ausgabe ist 0.

Abschluss:

Eine festgelegte Datenstruktur in C ++ ist eine Struktur, in der die Liste der Elemente standardmäßig in aufsteigender Reihenfolge oder in absteigender Reihenfolge nach der Wahl des Programmierers gespeichert ist. Alle Elemente des Sets sind einzigartig. Eine Kartendatenstruktur in C ++ ist eine Struktur, in der die Liste ein Hash von Schlüssel-/Wertpaaren ist, der standardmäßig in aufsteigender Reihenfolge der Schlüssel gespeichert ist. Die Schlüssel sind auch einzigartig, und es können doppelte Werte geben. Das Hauptdatenelement eines der Strukturen ist die Liste. Jede Struktur hat Mitgliederfunktionen, von denen einige üblicherweise verwendet werden.