C++ std::map und std::set - effizient einfügen Duplikate

Habe ich einen Haufen Daten, die voller Duplikate, und ich will zur Beseitigung der Duplikate. Sie wissen, z.B. [1, 1, 3, 5, 5, 5, 7] wird [1, 3, 5, 7].

Es sieht aus wie ich kann entweder std::map und std::set, um diese zu bewältigen. Aber ich bin mir nicht sicher ob es schneller ist, (a) legen Sie einfach alle Werte in die container, oder (b) überprüfen Sie, ob Sie bereits im container und nur einfügen, wenn Sie nicht - sind die Einsätze sehr leistungsfähig? Auch wenn es einen besseren Weg,... können Sie vorschlagen, eine schnelle Möglichkeit, dies zu tun?

Andere Frage - wenn die Daten, die ich bin, zu speichern, in Ihnen ist nicht so trivial, wie ganze zahlen, und stattdessen ist eine benutzerdefinierte Klasse, wie funktioniert der std::map zu verwalten, um Sie zu lagern (hash?) die Daten für den schnellen Zugriff per operator[]?

Ein set wäre mehr geeignet, da Sie nicht benötigen Sie einen zugehörigen Wert mit jedem element. Ich werde zu erraten, dass die Prüfung und dann das einfügen in den Satz langsamer sein wird als nur das einsetzen, denn Sie würden im wesentlichen werden dabei zwei Schlüssel suchen in der ehemaligen.
Durch die definition einer von den beiden wird überprüfen, für dich bei ausführen einfügen. I. e. Sie wird tun, was Sie sonst mit einigen anderen container: überprüfen Sie für existance. Persönlich, ich ' D gehen mit dem set, es sei denn, Sie sind absichtlich mapping etwas, um etwas anderes.
Ist die Daten immer sortiert? Weil es aussieht wie Sie wollen, std::unique, nicht einen neuen container
Nein, es ist nicht sortiert. Aber ich brauche einen container, um die Ergebnisse aus dem original-Datensatz (die muss ich behalten).
Danke an alle für Eure Antworten. Leider kann ich nicht markieren Sie alle. 🙂

InformationsquelleAutor Gigi | 2012-10-10

Schreibe einen Kommentar