Heim >Backend-Entwicklung >C++ >Wie entferne ich Duplikate aus einem unsortierten Vektor und behalte dabei die Ordnung bei?

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

Linda Hamilton
Linda HamiltonOriginal
2024-11-13 05:59:02390Durchsuche

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_;
};

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));

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!

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