Heim >Backend-Entwicklung >C++ >Wie kann ich Duplikate effizient entfernen und einen C-Vektor sortieren?

Wie kann ich Duplikate effizient entfernen und einen C-Vektor sortieren?

Barbara Streisand
Barbara StreisandOriginal
2024-12-20 20:24:10191Durchsuche

How Can I Efficiently Remove Duplicates and Sort a C   Vector?

Optimierung der doppelten Löschung und Sortierung in einem Vektor

In C sind Vektoren eine gängige Datenstruktur zum Speichern von Elementen. Allerdings kann die effiziente Verwaltung großer Vektoren mit Duplikaten und Sortieranforderungen eine Herausforderung sein.

Ineffizienter Ansatz

Das Code-Snippet lieferte Versuche, Duplikate zu löschen und einen Vektor mit std zu sortieren: :unique und std::sort:

vec.erase(
  std::unique(vec.begin(), vec.end()),
  vec.end());
std::sort(vec.begin(), vec.end());

Dieser Ansatz entfernt jedoch keine Duplikate richtig.

Bevorzugter Ansatz

Es gibt mehrere alternative Ansätze, die eine bessere Leistung bieten:

1. Verwenden eines std::set

Ein std::set ist ein Container, der automatisch einen sortierten und eindeutigen Satz von Elementen verwaltet. Durch die Konvertierung des Vektors in einen Satz können Duplikate effizient entfernt werden:

std::set<int> s(vec.begin(), vec.end());

Die sortierten Daten können dann zurück in den Vektor übertragen werden:

vec.assign(s.begin(), s.end());

2. Manuelles Löschen von Duplikaten

Duplikate können auch manuell gelöscht werden, indem Sie den Vektor durchlaufen und auf aufeinanderfolgende Duplikate prüfen:

for (auto it = vec.begin(); it != vec.end(); ) {
  if (*it == *(it+1)) {
    it = vec.erase(it);
  } else {
    ++it;
  }
}

Überlegungen zur Sortierung

Das Sortieren nach der Duplikatentfernung ist notwendig, um eine sortierte Reihenfolge aufrechtzuerhalten. Die Reihenfolge kann jedoch möglicherweise nicht in allen Fällen garantiert werden:

Fall 1: Zuerst sortieren, danach löschen

Wenn der Vektor vor dem Löschen von Duplikaten sortiert wird, std:: unique wird wahrscheinlich die sortierte Reihenfolge beibehalten.

Fall 2: Zuerst löschen, sortieren Nachher

Wenn Duplikate vor dem Sortieren gelöscht werden, kann die Reihenfolge möglicherweise nicht garantiert werden. Dies liegt daran, dass sich die Reihenfolge der Entfernung auf die Indizes nachfolgender Elemente auswirken kann.

Leistung

Die Leistung dieser Ansätze variiert je nach Anzahl der Duplikate. Bei einer großen Anzahl von Duplikaten kann die Konvertierung in einen Satz und zurück in einen Vektor schneller sein als das manuelle Löschen von Duplikaten. Bei einer kleinen Anzahl von Duplikaten kann jedoch das manuelle Löschen effizienter sein.

Das obige ist der detaillierte Inhalt vonWie kann ich Duplikate effizient entfernen und einen C-Vektor sortieren?. 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