Was ist std::pair
warum sollte ich es verwenden, und welche Vorteile boost::compressed_pair
bringen?
Antworten
Zu viele Anzeigen?Es handelt sich um eine Standardklasse für die Speicherung eines Wertepaares. Sie wird von einigen Standardfunktionen zurückgegeben/verwendet, wie std::map::insert
.
boost::compressed_pair
behauptet, effizienter zu sein: siehe hier
Zusatzinfo: boost::compressed_pair ist nützlich, wenn einer der Typen des Paares eine leere Struktur ist. Dies wird oft in der Template-Metaprogrammierung verwendet, wenn die Typen des Paares programmatisch von anderen Typen abgeleitet werden. Am Ende hat man dann normalerweise eine Art "leeres struct".
Ich würde std::pair für jede "normale" Verwendung bevorzugen, es sei denn, Sie sind in schwere Vorlage Metaprogrammierung.
Es ist nichts anderes als eine Struktur mit zwei Variablen unter der Haube.
Ich mag es eigentlich nicht, std::pair für Funktionsrückgaben zu verwenden. Der Leser des Codes müsste wissen, was .first ist und was .second ist.
Der Kompromiss, den ich manchmal verwende, besteht darin, sofort konstante Verweise auf .first und .second zu erstellen, wobei die Verweise eindeutig benannt werden.
Wozu dient std::pair und warum sollte ich es verwenden?
Es handelt sich um ein einfaches Tupel mit zwei Elementen. Es wurde in der ersten Version von STL in Zeiten, in denen Compiler noch nicht in großem Umfang Schablonen und Metaprogrammierungstechniken unterstützten, die erforderlich wären, um anspruchsvollere Tupeltypen wie Boost.Tupel .
Sie ist in vielen Situationen nützlich. std::pair
wird in standardmäßigen assoziativen Containern verwendet. Es kann als eine einfache Form des Bereichs verwendet werden std::pair<iterator, iterator>
- so dass man Algorithmen definieren kann, die ein einziges Objekt akzeptieren, das einen Bereich repräsentiert, anstatt zwei separate Iteratoren. (Dies ist in vielen Situationen eine nützliche Alternative.)
- See previous answers
- Weitere Antworten anzeigen