Контейнеры STL: set и multiset. Teil 9




класс gesetzt и multiset c ++, контейнеры STL, Set multiset für AnfängerSehr oft in der Praxis ist es erforderlich, nur diejenigen zu überwachen Zugehörigkeit zu anderen Einrichtungen oder zu einer Teilmenge. Solche Sammlungen in der klassischen Mathematik sind aufgerufen, viele, zu dem ein bestimmtes Objekt im Besitz sein kann, oder, oder nicht. Und die STL stellt eine solche Art von Behälter, das heißt - Set<> (viele).

Jedes Containerelement Set<> Es enthält nur Schlüsselwert (kein Paar, für Karte<>), so dass in dieser Art von Behälter ist sehr wirksam, um die Betriebsüberprüfung in einer Reihe von Werten in der Umsetzung. Dieser Behälter bietet viele gängige Methoden im Vergleich с Karte<>, obwohl hier sind einige entartet Qualität (und manchmal nutzlos):

  • Das Einfügen (Verfahren einfügen()) der neue Schlüsselwert auf den Satz von Renditen Paar Typ <Iterator, bool> (nur, für Karte<>). В этой паре второй компонент (zweite, Bool Typ) verweist auf den Erfolg der Operation: wenn wahr, die erste Komponente des Rückgabewerts (zuerst) Iterator gibt ein neues zusätzliches Element. Aber es ist ziemlich sinnlos Rückgabewert: wenn zurück wahr, der neue Wert wird auf die eingestellte erfolgreich hinzugefügt, wenn zurück falsch, es ist bereits zuvor eingestellt in - in beiden Fällen ist der Endzustand Satz wird identisch sein (aber in der Praxis ist der Rückgabewert einfügen() in der Regel nicht überprüfen ... und viele Leute nicht wissen,, dass es überhaupt für den Rückgabewert im Allgemeinen zur Verfügung gestellt);

  • Verfahren für den Behälter realisiert Graf() (für Multimap<>), aber, als der Schlüsselwert kann in einem Exemplar in der Menge nur vorhanden sein,, Verfahren Graf() kann nur zurückkehren 0, Wenn dieser Wert fehlt, und 1 Wenn ein Wert vorhanden ist,.

  • implementiertes Verfahren zum Behälter gefunden(), die zurück Iterator Mitglied, wenn der Wert gefunden wird, und der Wert des Iterators Ende() wenn der Wert nicht in der Menge.

Um zu demonstrieren, die oben wird eine Anwendung erstellen,, N-mal (Parameter, in der Anwendung Startbefehl definiert) Schleife erzeugt eine Zufallszahl in einem festgelegten Bereich [0…lim] und legt sie in der Menge. verständlicherweise, dass, wenn N steigt mehr als lim (und darüber hinaus bei N viel Mehr lim), каждое число диапазона [0…lim] Es wird eine immer größere Anzahl von Malen zu erzeugen:

класс gesetzt и multiset c ++, контейнеры STL, Set multiset für Anfänger
Im Argument der Eigenschaften nicht gesetzt Debuggen

класс gesetzt и multiset c ++, контейнеры STL, Set multiset für Anfänger
Im Argument der Eigenschaften wird das Debuggen 5
класс gesetzt и multiset c ++, контейнеры STL, Set multiset für Anfänger
Im Argument der Eigenschaften wird das Debuggen 100

Eine andere Art von Behälter ist in der Nähe multiset<>, so dass jeder Schlüsselwert eindeutig sein, und sein in der Menge von einer beliebigen Anzahl von Zeiten. Diese beiden Behälter (Set<> und multiset<>) so ähnlich, dass oben in der Anwendung gezeigt, ersetzen wir alle 2 Linie (Verfahren Graf() für multiset<> Retouren die Anzahl der Vorkommen Werte in der Menge):

Aber das Verhalten der Anwendung ändert sich radikal (Zum Vergleich zeigt die Ergebnisse einer Reihe von 2-Anwendungen unter identischen Bedingungen):

класс gesetzt и multiset c ++, контейнеры STL, Set multiset für Anfänger

sichtbar, dass multiset Werte 1, 2, 13, 17… kein Behälter, und der Wert 18, beispielsweise, Derzeit gibt 5 Zeit.

Newsletter neue Lektionen über die Programmierung:

Datum
Seite
Контейнеры STL: set и multiset. Teil 9
Wertung
51Star1Star1Star1Star1Star
Öl

Etwa Öl

praktische Erfahrungen über die Softwareentwicklung 40 Jahre. Lehrer Globale Logik internationales Softwareunternehmen. IBM Developer Works Permanent Autor von Publikationen. Wissenschaftliche Herausgeber der Computerliteratur-Verlag "Symbol-Plus", Sankt Petersburg.

Hinterlasse eine Antwort

Platz Code in Tags: <pre class="lang:c ++ dekodieren:true ">DEIN CODE</Vor>