Vorteile von Std :: Set vs Vektoren oder Karten
Dies kann eine dumme Frage, ich bin ziemlich neu in C++ und der Programmierung im Allgemeinen.
Ich Wünsche zu verstehen, die Verwendung von mehreren STL-Containern und mit diesem Gedanken im Hinterkopf, ich Frage mich, was sind die Vorteile der Verwendung von std::set vs zum Beispiel mithilfe von Vektoren oder maps?
Ich kann nicht scheinen zu finden, eine explizite Antwort auf diese Frage. Ich bemerkte, dass sets Karten, aber dann warum auch immer nicht verwenden Karten, oder verwenden Sie immer setzt. Stattdessen 2 ganz ähnliche Behälter werden zur Verfügung gestellt.
Vielen Dank im Voraus.
InformationsquelleAutor der Frage brunodd | 2013-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide
std::set
undstd::map
sind assoziative Container. Der Unterschied ist, dassstd::set
s enthalten nur die Schlüssel, während instd::map
gibt es einen zugeordneten Wert. Die Wahl einen über den anderen hängt hauptsächlich davon ab, was die Aufgabenstellung ist. Wenn Sie bauen wollen, ein Wörterbuch aller Wörter in einem text, können Sie einstd::set<std::string>
aber wenn Sie auch wollen, zu zählen, wie viele Male jedes Wort erschien (d.h. ordnen Sie einen Wert für den Schlüssel) dann müssten Sie einestd::map<std::string,int>
. Wenn Sie nicht brauchen, zuordnen, zählen, ist es nicht sinnvoll, dieint
das ist unnötig.InformationsquelleAutor der Antwort David Rodríguez - dribeas
set ist nützlich für die Speicherung von einzigartigen Dinge, wie ein enum für die "typeOfFruits"
einer Karte ist nützlich für die Speicherung von einzigartigen Dinge, plus ein 'Wert'
Vektor ist nützlich für die Speicherung Dinge, wo die Sequenz ist bestellt (push_back()).
stellen Sie sich vor Sie Scannen Sie Ihr Obst in eine Kasse, und das Programm verfolgt das scanning.
InformationsquelleAutor der Antwort Angel Koh
vector
ist schneller für Einfüge-und Löschvorgänge auf der Rückseite des Containers. Sie können den Zugriff auf die Elemente über den operator [].dequeue
ist ähnlichvector
aber es bietet die front einfügen und löschen.set
nur die-Taste gedrückt, währendmap
hat einepair
. Beide Container sind schneller für einfügen und löschen in der Mitte des Containers. Sie können auch den Zugriff auf Elemente über finden mit den STL-algorithmen.InformationsquelleAutor der Antwort lucas92
Keinen Körper hat, erwähnt die Tatsachen, dass
std::set
ist tatsächlich unveränderlich. Sie sollten nicht ändern Sie den Wert von jedem element.std::set
nicht verfolgen über die änderungen so, wenn Sie Bearbeiten ein element in der er Sie hinter seinen Rücken, und wahrscheinlich ändern Sie Ihre innere Bestellung. Dies ist ein riskantes Verhalten. Daher verwendenstd::map
wenn Sie möchten, Bearbeiten Sie die Elemente, nachdem man Sie in den container. Stellen Sie sicher, dass Siekey
zu induzieren, um die Bestellung und alles, was Sie brauchen, um zu ändern, danach invalue
.InformationsquelleAutor der Antwort user2554481
Kommt es auf die Komplexität gewährleistet, dass die am meisten gewünschten für Ihre Bewerbung, mit Bezug auf insertion, removal, Abruf, etc. Ich empfehle Scott Meyers' effective STL.
InformationsquelleAutor der Antwort Scott Jones