Entfernen Sie Doppelte Einträge in einem C++ - Vektor

Wollen einfach nur, um Duplikate entfernen. Pool ist vector<pair<string, int>> aber ich glaube, ich vermisse einige Elemente zu Beginn der Vektor-irgendwie. Kann jemand überprüfen, die Logik der Entfernung? Danke 🙂

Pool Master::eliminateDuplicates(Pool generation)
{
    for(int i = 0; i < generation.size(); i++)
    {
        string current = generation.at(i).first;

        for(int j = i; j < generation.size(); j++)
        {
            if(j == i)
            {
                continue;
            }
            else
            {
                string temp = generation.at(j).first;
                if(current.compare(temp) == 0)
                {
                    Pool::iterator iter = generation.begin() + j;
                    generation.erase(iter);
                }
            }
        }
    }

    return generation;
}
  • Tun Sie etwas dagegen, wenn es wird sortiert?
  • Eww, diese Kopien...
  • Ein einfacher (und wahrscheinlich schneller Weg, als die O(n^2) Weise, dass es zur Zeit dauert), dies zu tun ist das hinzufügen aller Elemente, die zu einer std::set und dann wieder zu einem std::vector.
  • Auch, ich nehme an, du meinst Pool ist ein vector<pair<string, int>>?
  • Ich dachte die setzt nur funktionieren würde, basierend auf den integer-Datentyp? Ich Vergleiche bei string-Duplikate. EDIT ja, sorry Tippfehler 😉
  • Ist diese Anweisung if(j == i){continue;} notwendig? Sie können einfach starten Sie die Schleife von i+1.
  • Führen könnte ein segmentation fault, wenn ich das Letzte element.
  • std::set arbeiten auf der Grundlage entweder operator< oder geben Sie einen Vergleich-Funktion verwenden kann. Es wäre ein ziemlich nutzloses gesetzt, wenn es funktioniert nur für Ganzzahlen!
  • In jedem Fall, Sie don nicht verwenden. Sie können Sortieren Sie Ihre Vektorgrafik und verwenden std::unque. Das wäre O(Nlog(N))

Schreibe einen Kommentar