C++: Collections und Collection-Bereiche

Dieser Code erzeugt einen Compile-Time-Fehler. Jedes Element in einer Collection ist ein std::pair< const Key, Value> (in diesem Fall std::pair< const std::string, int>). Es ist kein Operator<< für std::pair< Key, Value> definiert, daher der Fehler. Selbst wenn ein solcher definiert wäre, würde er für unsere Zwecke nicht ausreichen. Die Ausgabe würde vermutlich wie folgt aussehen:


'easily' -> 3
'write' -> 5
'collections' -> 12

Oder sogar so:


Word 'easily' appeared 3 time(s).
Word 'write' appeared 5 time(s).
Word 'collections' appeared 12 time(s).

Um den Unterschied zwischen dem Schreiben einer Collection und dem Schreiben eines Sequence Containers zu erkennen, genügt es, die Objekte für das Formatieren eines Bereichs bzw. Containers zu betrachten:

  • Das Formatter-Objekt legt fest, welche Transformation für das jeweilige Element angewandt wird und wie die Elemente geschrieben werden.
  • Das Writer-Objekt ermöglicht eine Formatierung nach dem Schreiben der Element-Umgebungen (Präfix, Element-Schluss und Suffix).
  • Das Transformations-Objekt ermöglicht die Umwandlung der einzelnen Elemente bevor sie geschrieben werden.

Für Collections lautet das Element std::pair< const Key, Value>. (Key ist dabei der Schlüssel der Collection und Value der Werttyp der Collection). Formatter und Writer können beibehalten werden, da das Formatter-/Writer-Verfahren für die Collections gleich ist. Allerdings muss die Transformation entscheiden, wie sie ein Paar aus Key und Value schreibt (im Gegensatz zu einem Wert allein bei Sequence Containern/Bereichen), da hier eine Abweichung gegenüber einem Sequence Container vorliegt.

Da die Transformation anders gehandhabt wird, ist auch die Default-Transformation anders. Statt den Wert zu schreiben, wie dies bei Sequence Containern und Bereichen geschieht, schreibt die Transformation die Elemente wie folgt: „<key> -> <value>“ – zum Beispiel „easily -> 3“. Das heißt, dass auch der Default-Formatter anders ist. (Er verwendet die Default-Transformation für Collections statt der für Sequence Container). Eigens für diesen Zweck habe ich die Funktionen coll_range und coll_container erstellt, die der Bereichs-/Container-Syntax ähneln.

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

Chips bescheren Samsung deutlichen Gewinnzuwachs

Das operative Ergebnis wächst um fast 6 Billionen Won auf 6,64 Billionen Won. Die Gewinne…

3 Tagen ago

Chrome: Google verschiebt das Aus für Drittanbietercookies

Ab Werk blockiert Chrome Cookies von Dritten nun frühestens ab Anfang 2025. Unter anderem gibt…

4 Tagen ago

BAUMLINK: Wir sind Partner und Aussteller bei der Frankfurt Tech Show 2024

Die Vorfreude steigt, denn BAUMLINK wird als Partner und Aussteller bei der Tech Show 2024…

4 Tagen ago

Business GPT: Generative KI für den Unternehmenseinsatz

Nutzung einer unternehmenseigenen GPT-Umgebung für sicheren und datenschutzkonformen Zugriff.

4 Tagen ago

Alphabet übertrifft die Erwartungen im ersten Quartal

Der Umsatz steigt um 15 Prozent, der Nettogewinn um 57 Prozent. Im nachbörslichen Handel kassiert…

7 Tagen ago

Microsoft steigert Umsatz und Gewinn im dritten Fiskalquartal

Aus 61,9 Milliarden Dollar generiert das Unternehmen einen Nettoprofit von 21,9 Milliarden Dollar. Das größte…

7 Tagen ago