Heim >Backend-Entwicklung >C++ >Wie entferne ich Duplikate aus einem unsortierten Vektor und behalte dabei gleichzeitig die Reihenfolge mit STL bei?
Problem:
Suchen Sie eine effiziente Lösung, um Duplikate aus einem bestimmten unsortierten Vektor zu entfernen Vektor unter Beibehaltung der ursprünglichen Reihenfolge.
Benutzerdefiniert Ansatz:
Die bereitgestellte Implementierung verwendet einen Satz zur Verfolgung einzigartiger Elemente. Es überprüft iterativ jedes Vektorelement, fügt einem neuen Vektor eindeutige Elemente hinzu und entfernt Duplikate aus dem ursprünglichen Vektor.
STL-Algorithmus-Ansatz:
Eine optimierte Lösung unter Nutzung von STL-Algorithmen wird empfohlen . Verwenden Sie den Algorithmus std::copy_if und definieren Sie ein Prädikat, das verarbeitete Elemente verfolgt. Geben Sie „false“ für bereits verarbeitete Elemente zurück, andernfalls „true“.
Implementieren des Prädikats:
Erstellen Sie eine Struktur namens NotDuplicate mit einer booleschen Operator()-Methode. Dieser Operator verfolgt Elemente durch eine Set-Einfügung. True wird zurückgegeben, wenn die Einfügung erfolgreich ist (was auf ein eindeutiges Element hinweist).
Verwendung von std::copy_if:
Verwenden Sie std::copy_if, um über den Originalvektor zu iterieren und dabei das NotDuplicate anzuwenden Prädikat. Eindeutige Elemente werden in einen neuen Vektor namens „uniqueNumbers“ kopiert. Durch die Referenzierung der NotDuplicate-Instanz innerhalb von std::copy_if werden Nebenwirkungen vermieden. Dieser Algorithmus bietet eine sauberere und effizientere Lösung, ohne dass Duplikate manuell entfernt oder Iteratoren gewartet werden müssen.
Das obige ist der detaillierte Inhalt vonWie entferne ich Duplikate aus einem unsortierten Vektor und behalte dabei gleichzeitig die Reihenfolge mit STL bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!