Heim > Backend-Entwicklung > C++ > Hauptteil

Wie entferne ich Duplikate aus einem unsortierten Vektor und behalte dabei die Ordnung bei?

Linda Hamilton
Freigeben: 2024-11-13 05:59:02
Original
344 Leute haben es durchsucht

How to Remove Duplicates from an Unsorted Vector while Maintaining Order?

Duplikate aus einem unsortierten Vektor entfernen

In verschiedenen Situationen ist es von entscheidender Bedeutung, die Reihenfolge des ersten Vorkommens beizubehalten und gleichzeitig Duplikate aus einem unsortierten Vektor zu entfernen. Während ein unkomplizierter Ansatz mit einem Satz und manueller Iteration effektiv ist, kann er durch die Nutzung von STL-Algorithmen verbessert werden.

Um dies zu erreichen, bietet der std::copy_if-Algorithmus eine praktische Lösung. Durch die Definition eines Prädikats, das bereits verarbeitete Elemente verfolgt und bei Duplikaten „false“ zurückgibt, können wir die gewünschten Elemente herausfiltern.

Wenn die C 11-Unterstützung nicht verfügbar ist, kann der ungeschickt benannte std::remove_copy_if verwendet werden, mit seine Logik wurde umgekehrt. Hier ist ein ungetestetes Beispiel zur Veranschaulichung:

template <typename T>
struct NotDuplicate {
  bool operator()(const T& element) {
    return s_.insert(element).second; // true if s_.insert(element);
  }
 private:
  std::set<T> s_;
};
Nach dem Login kopieren

Als nächstes kann der folgende Code verwendet werden:

std::vector<int> uniqueNumbers;
NotDuplicate<int> pred;
std::copy_if(numbers.begin(), numbers.end(), 
             std::back_inserter(uniqueNumbers),
             std::ref(pred));
Nach dem Login kopieren

In dieser Lösung stellt std::ref sicher, dass der Stateful-Funktor dies nicht tut intern innerhalb des Algorithmus kopiert. Allerdings stellt std::copy_if keine Anforderungen an Nebenwirkungen des angewendeten Funktors.

Das obige ist der detaillierte Inhalt vonWie entferne ich Duplikate aus einem unsortierten Vektor und behalte dabei die Ordnung bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage