Die Erkennung von Duplikaten mit set
Arbeite ich mit Daten, die nicht pop-up zweimal. Wenn es funktioniert, sollte es das erkennen und aufrufen einer Funktion, die Handhabung, die.
Derzeit drück ich mich einige Daten zu einem Vektor und vor dem einsetzen, Sie sollten überprüfen, ob die Daten bereits enthalten sind in diesem Vektor. Im moment ist dies nicht sehr effektiv, e.g
for (int i = 0; i < myVector.size() ; i++)
{
if ( myVector[i] == data )
{
//invoke function
return false;
}
}
Ich weiß set
ist eine spezielle Art von Vektor das können nur die eindeutigen Daten.
Gibt es eine andere Möglichkeit zum erkennen von doppelten Daten Hinzugefügt werden (oder zumindest versuchen, um es hinzuzufügen), um die set
?
- Gibt es einen Grund, dass Sie mit einem Vektor?
- Ich fahre Vektor-Funktion , die mehr optimalized als Rückgabe ein array von es ( ja, das ist was mir gesagt wurde hier ). Im anderen Teil des Codes , die ich verwenden Vektor von structs , aber die Idee ist die gleiche
- Ihre Frage ist nicht klar, Sie fragte nach Duplikaten mit einem Vektor oder ein set ?
- Ich gab ein Beispiel, was ich nun benutze, die ist unwirksam , und fragte über mögliche einfachere und bessere Lösung, die mithilfe von set
- Beim einfügen in einen Satz der zurückgegebene Wert zeigt an, ob es ein Duplikat ist oder nicht: en.cppreference.com/w/cpp/container/set/insert
- Ihre Frage bezieht sich auf die sehr grundlegenden Konzept der Vermischung. Ich schlage vor, Sie zuerst Lesen darüber, wie es scheint, Sie sind sich dessen nicht bewusst.
- während das wissen über die Grundlagen wie hashing ist immer toll-dann mit
sets
und eine andere Struktur hat in der Regel nicht erforderlich, dass der Benutzer wissen über solche Dinge-Sie sind versteckt in der Umsetzung - Während ich Stimme mit Ihnen auf diese, ich habe lediglich gemeint es als Anregung, was ich fühlte, wäre nützlich, um die OP. Hashing ist ein sehr einfaches Konzept, die ich fühle, jeder Programmierer kennen sollte. Beachten Sie, dass ich spreche nicht über die zugrunde liegende Implementierung einer
set
oder einen anderen Behälter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zuerst lasst uns einfach klar sein, dass ein
set
ist nicht eine Besondere Art vonvector
. Es ist eine Art container, der orthogonal zu Vektor,, die passiert, um doppelte Einträge zu vermeiden.Können Sie die Erkennung von Duplikaten durch überprüfen des Rückgabewerts von
insert
:std::set
zurückstd::pair<iterator, bool>
, wo diebool
istfalse
wenn die Einfügung fehlgeschlagen ist (durch das hinzufügen von doppelten Werten zum Beispiel).Beispiel:
Einen
std::set
oderstd::unordered_set
ist ein weiterer container von standard-c++ - Bibliothek, aber ist nicht einvector
... Sie gehorchen anderen Regeln:Für einen Vektor, ein einfacher Weg, um zu sehen, ob es bereits einen Wert enthält, ist (ref):
Für eine Reihe von unordered_set, die insert-Methode gibt ein paar iterator zeigt auf das element - boolescher Wert, der anzeigt, wo es zugegeben wurde oder nicht, weil er schon da
Können Sie eine
std::unordered_set
. Es ist eine Methodeinsert
, die je nach Bibliothek-version gibt Ihnen Informationen über das einfügen (entweder ein paar mit einembool
das ist wahr, wenn einfügen erfolgreich war, und false, wenn schon), oder ein iterator, etc. Finden Sie in der Dokumentation zu Ihrem lib.