Was Sie beachten sollten
Beachten Sie, dass bei Sequence Containern die Transformation eine Umwandlung von Elementen vor ihrem Schreiben erlaubt. Zum Beispiel möchte man vielleicht, dass in einem Namens-Array die Namen wie folgt angezeigt werden: KEITH, Jones (Vorname in Großbuchstaben, Nachname in Normalschrift). Das Gleiche gilt auch hier. Der Transformer ermöglicht dieses Vorgehen, wobei in der Klasse des Objekts die folgenden Funktionen implementiert sein müssen:
- write_prefix( streamOut, std::pair< const Key, Value>) schreibt ein Präfix, bevor der diesem Element entsprechende String geschrieben wird. Das zweite Argument wird bereitgestellt, wenn das Präfix auf Basis des Elements verarbeitet werden soll.
- transform_value( streamOut, Value) wandelt den Wert um und schreibt ihn.
- transform_key( streamOut, Key) wandelt den Schlüssel um und schreibt ihn.
Der Default-Transformer wird coll_transformation_base genannt. Er schreibt keine Präfixe (write_prefix bleibt leer) und schreibt den Schlüssel und den Wert ohne Änderungen. Wenn man dies optimieren möchte, muss man die entsprechende Klasse von coll_transformation_base ableiten und die benötigten Funktionen überschreiben.
So wird zum Beispiel der Schlüssel in Großbuchstaben geschrieben:
// writes the Key (which MUST be a string) // in upper case class KeyToUpper : public coll_transformation_base { public: template< class StreamType, class CharType> void transform_key( StreamType & streamOut, const std::basic_string< CharType> & key) { std::basic_string< CharType> upper = key; std::transform( upper.begin(), upper.end(), upper.begin(), toupper); streamOut << upper; } };
Listing B zeigt die Möglichkeiten einer Kombination der Transformation (Format-String und Transformer) mit dem Writer. Die Kommentare stellen den Output des jeweiligen Codes dar.
Hier die Punkte, die beim Schreiben von Collections zu beachten sind:
- Verwenden Sie coll_range/coll_container anstelle von range/container.
- Wenn Sie einen Formatter verwenden, benutzen Sie coll_transform als dessen ersten Parameter. Einzige Ausnahme: Das Schreiben von Vorgängen wie der Klasse write_key_and_value, wie in Listing A dargestellt.
- Wenn Sie coll_transform verwenden, ist der erste Parameter der Format-String. Sie können einen Transformer als zweiten Parameter bereitstellen, der string/key/value vor dem Schreiben umwandelt.
- Der Format-String muss nicht unbedingt sowohl einen Schlüssel (%k) als auch einen Wert (%v) enthalten. Beispielsweise schreibt Key: %k nur die Schlüssel, jeweils mit dem Präfix Key, und %v schreibt nur die Werte.
Probieren Sie es aus
Sie können hier den Code für das Schreiben von Bereichen, Containern, Collectionbereichen bzw. Collections sowie ein Beispiel herunterladen. Führen Sie das Beispiel an einem Argument aus, einer zu lesenden Text-Datei. Es wird gezählt, wie häufig jedes einzelne Wort in der Datei vorkommt, wobei das Ergebnis in der Konsole angezeigt wird.
Neueste Kommentare
Noch keine Kommentare zu C++: Collections und Collection-Bereiche
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.