Heim >Backend-Entwicklung >C++ >Wie entferne ich Duplikate aus einem unsortierten Array und behalte dabei die Einfügereihenfolge mithilfe von STL-Algorithmen bei?
STL-Algorithmen zum Entfernen von Duplikaten unter Beibehaltung der Reihenfolge
Bei einem Array unsortierter Ganzzahlen besteht die Aufgabe darin, doppelte Elemente zu entfernen und gleichzeitig die Einfügung beizubehalten Reihenfolge des ersten Auftretens jeder Ganzzahl. Während dies mit einem einfachen Ansatz unter Verwendung einer Menge erreicht werden kann, bietet eine optimierte Lösung unter Nutzung von STL-Algorithmen eine effizientere und elegantere Lösung.
STL-Algorithmus-basierter Ansatz
STL bietet mehrere Algorithmen, die eine effiziente Manipulation von Containern ermöglichen. Ein solcher Algorithmus ist std::copy_if. Dieser Algorithmus kann verwendet werden, um einen neuen Vektor zu erstellen, der eindeutige Elemente enthält und gleichzeitig ihre ursprüngliche Reihenfolge beibehält.
Um diese Lösung zu implementieren, definieren Sie eine Prädikatsfunktion, die zuvor angetroffene Elemente verfolgt und „false“ zurückgibt, wenn ein Element bereits vorhanden war verarbeitet. Dadurch wird sichergestellt, dass nur eindeutige Elemente in den neuen Vektor kopiert werden.
Implementierung
Definieren Sie in C 11 und höher ein Funktionsobjekt mit einem überladenen Operator(), der implementiert das Prädikat:
template <typename T> struct NotDuplicate { bool operator()(const T& element) { return s_.insert(element).second; // true if element is unique } private: std::set<T> s_; };
Übergeben Sie dieses Prädikat zusammen mit den Original- und Zielvektoren an std::copy_if:
std::vector<int> uniqueNumbers; NotDuplicate<int> pred; std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(uniqueNumbers), std::ref(pred));
Wenn C 11-Unterstützung nicht verfügbar ist, verwenden Sie std::remove_copy_if und invertieren Sie die Prädikatenlogik, um das gleiche Ergebnis zu erzielen.
Schlussfolgerung
Dieser Ansatz demonstriert die Wirksamkeit von STL-Algorithmen für die effiziente Manipulation von Containern und stellt gleichzeitig die Einhaltung der gewünschten Bestellanforderungen sicher . Durch die Nutzung des std::copy_if-Algorithmus können Sie Duplikate aus einem unsortierten Vektor entfernen und gleichzeitig die Einfügereihenfolge der eindeutigen Elemente beibehalten.
Das obige ist der detaillierte Inhalt vonWie entferne ich Duplikate aus einem unsortierten Array und behalte dabei die Einfügereihenfolge mithilfe von STL-Algorithmen bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!