Ich habe eine Reihe von Daten voller Duplikate und ich möchte die Duplikate zu beseitigen. Sie wissen z.B. [1, 1, 3, 5, 5, 5, 7] wird zu [1, 3, 5, 7].C++ std :: map oder std :: set - effizient Duplikate einfügen
Es sieht so aus, als ob ich entweder std :: map oder std :: set verwenden kann. Ich bin mir jedoch nicht sicher, ob es schneller ist, (a) einfach alle Werte in den Container einzufügen oder (b) zu prüfen, ob sie bereits im Container vorhanden sind und nur einfügen, wenn sie nicht - sind Einsätze sehr effizient? Selbst wenn es einen besseren Weg gibt ... kannst du einen schnellen Weg vorschlagen, dies zu tun?
Eine weitere Frage - wenn die Daten, die ich in ihnen speichern nicht so trivial wie Integers ist, und stattdessen eine benutzerdefinierte Klasse ist, wie verwaltet die std :: map die Daten für schnell zu speichern (Hash?) Zugriff über Operator []?
Ein 'set' wäre besser geeignet, da Sie für jedes Element keinen zugehörigen Wert benötigen. Ich gehe davon aus, dass das Überprüfen und Einfügen in das Set langsamer ist als das Einfügen, da Sie im Wesentlichen zwei Schlüsselsuchen durchführen müssen. – GWW
Per Definition wird jeder von denen * für Sie * überprüfen, wenn die Einfügung durchgeführt wird. I.e. Sie werden tun, was Sie sonst mit einem anderen Behälter tun würden: auf Existenz prüfen. Persönlich würde ich mit dem Set gehen, wenn Sie nicht absichtlich etwas auf etwas anderes abbilden. – WhozCraig
Sind die Daten immer sortiert? Weil es so aussieht, als ob Sie [std :: unique] (http://msdn.microsoft.com/en-us/library/9f5eztca (v = vs.100) .aspx) wollen, kein neuer Container –