Setzen Sie vs Map in C ++

Setzen Sie vs Map in C ++
Ziel dieses Artikels ist es, die Ähnlichkeiten und Unterschiede zwischen einem Satz und einer Karte zu vermitteln. "Vs" im Titel bedeutet "versus". Zunächst einmal, was ist ein Set? - Ein Set in C ++ ist wie der Set in Mathematik. In C ++ ist ein Satz eine Gruppe nicht unbedingt unabhängiger Werte, sondern vom gleichen Typ. Die Werte eines Satzes werden in c Schlüssel bezeichnet++.

Was ist dann eine Karte? - Eine Karte ist ein Satz von Schlüssel-/Wertpaaren. In C ++ sind die Schlüssel vom gleichen Typ und die Werte sind ebenfalls vom gleichen Typ. Es gibt Multiset und es gibt Multimap. Ein Multiset ist ein Satz, an dem die Werte nicht eindeutig sind. Das heißt, es kann mehr als einen der gleichen Werte geben. Vergessen Sie nicht, dass die Werte des Satzes in c Schlüssel genannt werden++. In einer Karte können einige der Werte gleich sein, aber die Schlüssel müssen unterschiedlich sein (einzigartig). In einem Multimap kann es mehr als einen Schlüssel geben, der gleich ist.

Der Titel dieses Artikels lautet "Set vs Map in C ++". Multiset und Multimap werden also in diesem Artikel nicht berücksichtigt. Nur eingestellt und Karte werden verglichen und kontrastiert.

Jedes Mal, wenn eine Taste in einen Satz eingefügt wird, wird der Satz neu sortiert. Hinweis: Ein Set in C ++ kann auch Schlüssel-/Wertpaare haben. und dies ist keine mathematische Sicht des Sets. - Trotzdem kann in C ++ Schlüssel-/Wertpaare aufweisen. Jedes Mal, wenn ein Schlüssel-/Wertpaar in einen Satz eingefügt wird, wird der Satz durch Tasten neu sortiert. Andererseits besteht eine Karte per Definition aus Schlüssel-/Wertpaaren, bei denen die Schlüssel kein Duplikat haben. Auch bei der Karte wird jedes Mal, wenn ein Schlüssel-/Wert-Paar in die Karte eingefügt wird, die Karte durch Tasten neu sortiert. Die Menge und die Karte sind in dieser Hinsicht gleich.

Sowohl die Set als auch die Karte haben jeweils die Spezialisierung der Vorlagenvergleichs -Vorlage. Beide sind assoziative Behälter. Verwenden Sie für beide von ihnen, um die Datenstruktur aufzuheben, die Spezialisierung der Vorlagenspezialisierung mit dem Tastetyp "Schlüssel" aus, um „Schlüssel“ zu ersetzen. Verwenden Sie für beide, damit die Datenstruktur abfällt, die Spezialisierung der Vergleichsvorlagenspezialisierung, die „Schlüssel“ durch den Schlüsseltyp ersetzt. Für beide ist weniger der Standard.

Für beide Datenstrukturen sind Mitgliedsfunktionen Kategorien in den folgenden Kategorien: Konstruktionen (einschließlich Kopie und Zuordnung), Iteratoren, Modifikatoren, Beobachter, Operationen und Swap. In all diesen Kategorien sind das Mitglied sowohl für den Satz als auch für die Karte ähnlich.

Die festgelegte Datenstruktur hat nicht die Kategorie Elementzugriffszugriff, aber die Karte. Die Kategorie Element Access besteht aus den Quadratklammern und den AT () -Mitgliedsfunktionen, die wie die Gegenstücke für den Vektor verwendet werden. Sie werden verwendet, um auf jedes Element in der Karte zuzugreifen (scannen). Das Set hat diese Betreiber oder Funktionen nicht. Für das Set werden mit Iteratoren auf Elemente zugegriffen. Auf Elemente kann auch mit ähnlichen Iteratoren für die Karte zugegriffen werden.

Oben sind die wichtigsten Ähnlichkeiten und Unterschiede für den Satz und die Karte. Die Besonderheit in diesem Vergleich besteht bei der Verwendung von Schlüssel-/Wertpaaren. Schlüssel-/Wertpaar ist die Struktur, die als Paar in der C ++ - Dienstprogrammbibliothek bezeichnet wird. Der Rest dieses Artikels enthält eine kurze Beschreibung, wie das Paar sowohl im Set als auch in der Karte verwendet wird, beginnend mit dem, was ein Paar ist:

Paar

Die Syntax eines Paares buchstäblich lautet:

Schlüsselwert

Eine Reihe solcher Paare, die aus einem Satz oder einer Karte bestehen würden, ist:

"Lemons", 8
"Orangen", 5
"Pears", 12

Dies stellt eine Datenstruktur von Früchten und deren Zahlen dar, die in einem Korb gefunden wurden. Der Schlüssel für jedes Paar ist der String -Typ. und der Wert für jedes Paar ist der Ganzzahltyp. Das folgende Programm konstruiert drei verschiedene Paare desselben Value_Type, String/Int:

#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Paar pr1 = "lemons", 8;
Paar pr2 = "Orangen", 5;
Paar pr3 = "pears", 12;
Rückkehr 0;

Beachten Sie, dass die Versorgungsbibliothek enthalten war. Die Namen der Paare sind PR1, PR2 und PR3. Sie haben den gleichen Value_Type, String/int.

Der Schlüssel/Wert eines Paares darf nicht unbedingt String/int sein. Es kann Iterator/Bool mit der wörtlichen Syntax sein:

Iterator, bool

In einem Paarobjekt ist Bool entweder wahr oder falsch, und Iterator ist der Name des Iterators. Es ist diese Art von Paar, die zurückgegeben wird, wenn ein Schlüssel-/Wertpaar wie ein String/Int -Paar in einen Satz oder eine Karte eingefügt wird. Die BOOL -Komponente ist wahr, wenn und nur, wenn das Paar einfügt. Die Iteratorkomponenten verweist auf das bestimmte eingefügte Element (Schlüssel und Wert) als Ganzes.

Der Schlüssel eines Paares wird in C ++ als "First" bezeichnet. und der Wert des Paares heißt "zweit".

Konstruktionen einstellen und kartieren

Satz
Ein leerer Satz von String/INT -Paaren würde wie folgt konstruiert:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Satz> st;
Rückkehr 0;

Die wichtigste Vorlagenspezialisierung ist „Paar“ und wird als eine Komponente angesehen. Die eine Komponente bezieht sich auf das Paar (von Schlüssel/Wert).

Karte
Eine leere Karte der String/int -Paare würde wie folgt konstruiert:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
int main ()

Karte Abgeordneter;
Rückkehr 0;

Hier beginnt die Vorlagenspezialisierung mit Schlüssel und dann Wert. Die wichtigste Vorlagenspezialisierung ist "String" und die Spezialisierung der Wertschablone lautet "int". Es gibt zwei Komponenten für die Karte, die der Schlüssel und den Wert sind. Für den Satz gibt es eine Komponente, die aus zwei internen Komponenten besteht. Beachten Sie den Unterschied.

Einfügen

Satz
Der folgende Funktionscode c ++ main () zeigt, wie Paare in einen Satz eingefügt und ausgedruckt werden können (auf dem Bildschirm angezeigt):

Paar pra = "pears", 12, prb = "oranges", 5, prc = "lemons", 8;
Satz> st;
st.Insert (PRA); st.Insert (PRB); st.Insert (PRC);
für (set> :: iterator iter = st.Start(); Iter != ST.Ende(); Iter ++)
Cout << iter->Erste << " => " << iter->zweite << endl;

Die Ausgabe ist:

Zitronen => 8
Orangen => 5
Birnen => 12

Beachten Sie, dass die Schlüssel-/Wertpaare zwar nicht in aufsteigender Reihenfolge nach Schlüssel eingefügt wurden, die Elemente, bei denen intern nach Schlüssel sortiert wurde. Das Set wird seine Elemente immer nach Schlüssel sortieren, ob es sich um Paare handelt oder nicht.

Karte
Der folgende Funktionscode von Main () zeigt, wie Paare in eine Karte eingefügt und ausgedruckt werden können (auf dem Bildschirm angezeigt):

Paar pra = "pears", 12, prb = "oranges", 5, prc = "lemons", 8;
Karte Abgeordneter;
MP.Insert (PRA); MP.Insert (PRB); MP.Insert (PRC);
für (Karte:: iterator iter = mp.Start(); Iter != MP.Ende(); Iter ++)
Cout << iter->Erste << " => " << iter->zweite << endl;

Die Ausgabe ist:

Zitronen => 8
Orangen => 5
Birnen => 12

Obwohl die Schlüssel-/Wertpaare nicht in aufsteigender Reihenfolge nach Schlüssel eingefügt wurden, wurden die Elemente, bei denen intern nach Schlüssel sortiert wurde. Die Karte sortiert ihre Elemente immer nach Schlüssel.

Abschluss

Die Ähnlichkeiten und Unterschiede zwischen einem Satz und einer Karte in C ++ werden leicht aus ihren unterschiedlichen Definitionen geschätzt. Die Besonderheit taucht im Umgang mit Paaren auf. In C ++ kann ein Satz Paare haben, was nicht wirklich das ist, was Mathematik vorschlägt. Trotzdem muss der Programmierer wissen, wie man mit Paaren für einen Satz und für eine Karte umgeht.