So fügen Sie Daten in einen C ++ - Set ein

So fügen Sie Daten in einen C ++ - Set ein
Das Folgende ist ein Satz von sechs Farbnamen:
"grau", "weiß", "aqua", "schwarz", "fuchsia", "blau"

Dies ist eine Reihe von Saiten. In C ++ ist es möglich, eine Reihe von Ganzzahlen, eine Reihe von Schwimmern, eine Reihe von Doppel usw. zu haben. Dies ist auch ein Array -Literal in C++. Es ist auch eine Initializer_List. Es ist auch das set buchstäbliche, wenn auch nicht sortiert, obwohl es nicht sortiert ist.

Um einen Satz der oben genannten Zeichenfolgen zu haben, sollte das C ++ - Programm wie folgt beginnen:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;

Die ersten drei Zeilen sind Richtlinien. Die letzte Zeile ist eine Aussage. Die ersten drei Zeilen enthalten die erforderlichen Bibliotheken. Die letzte Zeile besteht auf der Verwendung des Standard -Namespace.

Die SET -Klasse hat viele überlastete Elementfunktionen in Einfügen () überlastet. Nur vier, die am besten geeignet sind, werden in diesem Artikel erläutert. Die vier erklärten sind für Set und nicht für Multiset.

Ein Set wird immer intern sortiert und standardmäßig aufsteigt. Immer wenn ein Wert eingefügt wird, wird der Satz neu sortiert.

void Insert (Initializer_List)

Diese Mitgliedsfunktion nimmt als Argument die Initializer_List an, die das Array -Literal ist (wie ein Set Literal). Es kann Werte auch in einen leeren Satz einfügen. Die Funktion gibt ungültig zurück. Das folgende Programm zeigt die Mitgliedsfunktion in Aktion:

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

Satz st;
st.insert ("grau", "weiß", "aqua", "schwarz", "fuchsia", "blau");
für (set:: iterator it = st.Start(); Es != ST.Ende(); es ++)
Cout << *it << ", ";

Cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Aqua, Schwarz, Blau, Fuchsia, grau, weiß,

Beachten Sie, dass sich die Ausgabe in der orientierenden Reihenfolge von String -Literalen befindet. Wenn die String-Bibliothek nicht enthalten ist und stattdessen Const-char* verwendet wird, würden die Zeiger sortiert und nicht die String-Literale.

Die SET -Klasse verfügt über einen Konstruktor, der die Initializer_List nehmen kann. In diesem Fall wird es keine Ersteinfüge benötigen. Der folgende Code zeigt dies:

Satz st ("grau", "weiß", "aqua", "schwarz", "fuchsia", "blau");
für (set:: iterator it = st.Start(); Es != ST.Ende(); es ++)
Cout << *it << ", ";

Cout << endl;

Die Ausgabe ist immer noch,

Aqua, Schwarz, Blau, Fuchsia, grau, weiß,

für den gleichen Eingang; Ausgabe sortiert aufsteigend.

Template Void Insert (InputIterator zuerst, InputIterator zuletzt)

Diese Mitgliedsfunktion fügt einen Bereich aus einem anderen Satz ein. Der Bereich des anderen Satzes beginnt von der Stelle, auf die der Iterator zuerst zeigt, aber nicht den Wert, auf den der Iterator zuletzt zeigt. Die Funktion gibt ungültig zurück. Der folgende Code zeigt dies:

Satz ST2 ("Purple", "Navy", "Yellow", "Olive", "Teal", "Rot", "Silber");
für (set:: iterator it = ST2.Start(); Es != ST2.Ende(); es ++) Cout << *it << ", "; cout << endl;
Satz:: Iterator itb2 = ST2.Start(); Satz:: iterator ite2 = ST2.Ende();
ITB2 ++; ITB2 ++; ite2--; ite2--; ite2--;
Satz st ("grau", "weiß", "aqua", "schwarz", "fuchsia", "blau");
für (set:: iterator it = st.Start(); Es != ST.Ende(); es ++) Cout << *it << ", "; cout << endl;
st.Insert (ITB2, ITE2);
für (set:: iterator it = st.Start(); Es != ST.Ende(); es ++) Cout << *it << ", "; cout << endl;

Die Ausgabe ist:

Marine, Olive, Lila, Rot, Silber, Blaugrün, Gelb,
Aqua, Schwarz, Blau, Fuchsia, grau, weiß,
Aqua, Schwarz, Blau, Fuchsia, grau, lila, rot, weiß,

Die sortierte Reichweite (lila, rot, Silber) aus dem Set ST2 ohne „Silber“ wurde in den Set ST eingeführt. ST wurde automatisch neu sortiert, um die dritte Zeile der Ausgabe zu haben.

Iterator Insert (const_iterator Position, const value_type & x)

Das zweite Argument dieser Mitgliedsfunktion ist die Variable eines konstanten Zeigers (char). Diese Mitgliedsfunktion sollte den Stringzeiger in die von dem Iterator gerichtete Position passen, die das erste Argument ist. Dies wird wahrscheinlich nicht wie der Erscheinen aufgrund der Sortierung, die nach dem Einfügen stattfinden soll, funktioniert. Die Mitgliedsfunktion gibt einen Iterator zurück, der auf das eingefügte Element verweist. Das folgende Programm zeigt dies:

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

const char* str = "lila";
Satz st ("grau", "weiß", "aqua", "schwarz", "fuchsia", "blau");
für (set:: iterator it = st.Start(); Es != ST.Ende(); es ++) Cout << *it << ", "; cout << endl;
Satz:: const_iterator itb = st.Start(); ITB ++; ITB ++;
Satz:: iterator iter = st.Insert (itb, str);
Cout << *iter << endl;
für (set:: iterator it = st.Start(); Es != ST.Ende(); es ++) Cout << *it << ", "; cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Aqua, Schwarz, Blau, Fuchsia, grau, weiß,
lila
Aqua, Schwarz, Blau, Fuchsia, grau, lila, weiß,

Iterator Insert (const_iterator Position, value_type && x)

Diese Mitgliedsfunktion ähnelt dem oben genannten, aber das zweite Argument ist eigentlich das Wert- und nicht die Variable. Das folgende Programm zeigt dies:

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

Satz st ("grau", "weiß", "aqua", "schwarz", "fuchsia", "blau");
für (set:: iterator it = st.Start(); Es != ST.Ende(); es ++) Cout << *it << ", "; cout << endl;
Satz:: const_iterator itb = st.Start(); ITB ++; ITB ++;
Satz:: iterator iter = st.Insert (ITB, "lila");
Cout << *iter << endl;
für (set:: iterator it = st.Start(); Es != ST.Ende(); es ++) Cout << *it << ", "; cout << endl;
Rückkehr 0;

Die Ausgabe ist:

Aqua, Schwarz, Blau, Fuchsia, grau, weiß,
lila
Aqua, Schwarz, Blau, Fuchsia, grau, lila, weiß,

Abschluss

Ein Set in C ++ kann leer erstellt werden. Wenn es leer erstellt wird, kann die Funktion Insert () Member verwendet werden, um die anfänglichen Elemente des Satzes festzulegen. In diesem Fall muss die Initializer_List als alleiniges Argument für die Einfügefunktion verwendet werden. Die entsprechende überlastete Mitgliederfunktion gibt void zurück.

Ein Set wird standardmäßig intern aufsteigend sortiert. Wenn ein Wert eingefügt wird, wird der Satz automatisch neu gesorgt. Die SET -Bibliothek muss enthalten sein, damit der Set codiert werden soll.

Es gibt drei weitere häufig verwendete Set -Insert () -Methoden. Man kehrt void zurück und die anderen beiden geben einen Iterator zurück, der auf das eingefügte Element zeigt. Derjenige, der die void zurückgibt. Der Bereich wird in der Syntax von den Iteratoren zuerst und zuletzt identifiziert. Last ist einfach nicht im eingefügten Bereich enthalten.

Für die anderen beiden Mitgliedsfunktionen fügt einer die Variable eines Wertes ein und der andere fügt den wörtlichen Wert selbst ein. Beide setzen in einige beabsichtigte Positionen ein. Die beabsichtigten Positionen werden möglicherweise nicht respektiert, da die Sortierung nach dem Einfügen stattfindet.