Ich bin auf der Suche nach einer Möglichkeit, Duplikate aus einem Vektor zu entfernen (nennen wir ihn den GroßenVektor: D). Ich kann nicht std :: sort gefolgt von std :: unique verwenden, da es keine Möglichkeit gibt, meine Objekte zu sortieren.Entfernen von Duplikaten aus einem nicht sortierbaren Vektor
theGreatVector enthält einige vector<Item*>
(smallVectors)
ich eine Überlastung von == bekam für vector<Item*>
, so kann ich es verwenden
Ich bin in der Lage de etwas in O (n²) erstellen, aber ich brauche Zeiteffizienz (theGreatVector.size() könnte 10⁵ oder 10⁶)
Gerade jetzt, was ich habe ist etwas wie das (i füllen mein Vektor nur, wenn smallOne ist nicht drin):
for(i=0;i<size;i++)
{
vector<Item*>smallOne = FindFacets(i)
if(smallOne doesnt belong to GreatOne) // this line already in O(n) :/
{
theGreatOne.push_back(smallOne);
}
}
Wenn es eine Möglichkeit gibt, das auch in nlog (n) + n oder etwas niedriger als n² zu tun, wäre das großartig!
Vielen Dank
Azh
Wenn Sie Wertegleichheit haben, ist es wahrscheinlich, dass Sie auch eine Reihenfolge definieren und eine Sortierung durchführen können. – juanchopanza
was meinst du, du kannst deine objekte nicht sortieren? Sie können jedes Datenelement immer in ein 'std :: tuple' 'std :: binden und die lexikographische Anordnung dafür verwenden. – TemplateRex
Was macht Ihr' == 'on' vector- '? Vergleicht es "Größe" und Zeigerwerte, oder dereferenziert die Zeiger und vergleicht zugrunde liegenden Wert? Warum denkst du, dass '<' nicht ähnlich funktionieren kann, ist 'Item' irgendwie seltsam? Mit "Duplikaten" meinst du duplicate 'vector
- ', oder dupliziere 'Item *' in einem der 'vector
- ', oder dupliziere 'Item' in einem' Item * 'in einem der' vector
- '(ich nehme an Der Erste)? Ist die Reihenfolge von 'GreatOne' wichtig? Wie oft fügst du dazu noch hinzu? Lesen? Ändern? In welchem Muster (viele Ergänzungen, dann nichts als viele Lektüren?) –
Yakk