Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entferne ich Duplikate aus einem unsortierten Array und behalte dabei die Einfügereihenfolge mithilfe von STL-Algorithmen bei?

Wie entferne ich Duplikate aus einem unsortierten Array und behalte dabei die Einfügereihenfolge mithilfe von STL-Algorithmen bei?

Linda Hamilton
Linda HamiltonOriginal
2024-11-11 19:02:03486Durchsuche

How to Remove Duplicates from an Unsorted Array While Maintaining Insertion Order Using STL Algorithms?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn