Die Boost C++ Bibliotheken

Teil III. Container

Container sind eine der nützlichsten Datenstrukturen in C++. So bietet die Standardbibliothek aus gutem Grund zahlreiche Container an. Die Boost-Bibliotheken stellen noch mehr zur Verfügung.

  • Boost.MultiIndex bietet nicht einfach einen Container an, sondern geht einen Schritt weiter: Die Container dieser Bibliothek können die von anderen Containern bekannten Schnittstellen gleichzeitig unterstützen. Container von Boost.MultiIndex sind gewissermaßen aus mehreren Containern verschmolzen und bieten all ihre Vorteile in einem Container vereint an.

  • Boost.Bimap basiert auf Boost.MultiIndex. Die Bibliothek stellt einen Container ähnlich std::unordered_map zur Verfügung. Im Container gespeicherte Elemente können jedoch von beiden Seiten nachgeschlagen werden. Was Schlüssel und Wert ist, hängt davon ab, von welcher Seite auf den Container zugegriffen wird.

  • Boost.Array und Boost.Unordered bieten mit boost::array, boost::unordered_set und boost::unordered_map Container an, die mit C++11 in die Standardbibliothek aufgenommen wurden.

  • Boost.CircularBuffer bietet einen Ringspeicher an. Wichtigste Eigenschaft: Wird einem vollen Ringspeicher ein Element hinzugefügt, wird das erste Element im Ringspeicher überschrieben.

  • Boost.Heap bietet zahlreiche Varianten von Priority-Queues an – also Klassen, die std::priority_queue ähneln.

  • Alle Container aus der Standardbibliothek kopieren oder – seit C++11 – verschieben Objekte, wenn diese einem Container hinzugefügt werden. Mit Boost.Intrusive können Container verwendet werden, die ein Objekt weder kopieren noch verschieben. Damit das Originalobjekt zum Beispiel einer intrusiven Liste hinzugefügt werden kann, muss dessen Typ jedoch bestimmte Anforderungen erfüllen.

  • Boost.MultiArray ist bemüht, den Umgang mit mehrdimensionalen Arrays zu vereinfachen. So können zum Beispiel Teilausschnitte eines multidimensionalen Arrays wie eigenständige Arrays behandelt werden.

  • Boost.Container ist eine Bibliothek, die die gleichen Container wie die Standardbibliothek anbietet. Ihr Einsatz kann zum Beispiel in Programmen sinnvoll sein, die für mehrere Plattformen angeboten werden sollen, um Probleme mit möglicherweise unterschiedlichen Implementationen der Container der Standardbibliothek zu vermeiden.