Ich möchte den Vektor mit einem Array vergleichen. Elemente in Vektor und Array sind in unterschiedlicher Reihenfolge, unsortiert und können dupliziert werden. Z.B.
Unten sind die gleichen:
%Vor%Unten, nicht dasselbe:
%Vor%Und so etwas ist auch nicht dasselbe:
%Vor%Jetzt muss ich prüfen, ob Vektor und Array die gleichen Elemente haben. Ich kann den Vektor und das Array nicht ändern, aber ich kann einen neuen Container erstellen und das Element aus Vektor und Array in diesen neuen Container kopieren und dann kopiere sie. Ich frage danach, weil ich das auf eine effiziente Art und Weise tun möchte. Danke.
Es gibt viele verschiedene Möglichkeiten, dieses Problem zu lösen, jedes hat Vor- und Nachteile.
xor
sie alle. Arrays mit unterschiedlichem Hash-Wert können nicht gleich sein. std::unordered_multiset
Sie könnten ein unordered_multiset
erstellen, das die Häufigkeit von Elementen im Bereich enthält. Obwohl es im Durchschnitt eine lineare Komplexität aufweist, kann es aufgrund von Hash-Kollisionen O (n ^ 2) sein. Zitat aus dem Standard (N3337, § 23.5.7.2):
Komplexität: Durchschnittlicher Fall linear, worst case quadratisch.
Sie sollten jedoch auch an die Komplexität von std::unordered_set::operator==
denken:
Für
unordered_set
undunordered_map
ist die Komplexität vonoperator==
(d. h. die Anzahl der Aufrufe an den==
- Operator vonvalue_type
, zu dem Prädikat, das vonkey_equal()
zurückgegeben wird, und zum hasher zurückgegeben vonhash_function()
) ist proportional zuN
in der Durchschnittswert und im schlimmsten FallN^2
, wobeiN
a.size()
ist.Für
unordered_multiset
undunordered_multimap
ist die Komplexität vonoperator==
ist proportional zusum of Ei^2
im durchschnittlichen Fall und im schlimmsten Fall zuN^2
, wobeiN
ista.size()
undEi
ist Größe deri
th Äquivalent-Schlüsselgruppe ina
.Allerdings, wenn die jeweilige Elemente von jedem entsprechenden Paar von äquivalenten Schlüsseln Die Gruppen
Eai
undEbi
sind in der gleichen Reihenfolge angeordnet (wie es üblich ist) B. wenna
undb
unmodifizierte Kopien derselben sind Container), dann die durchschnittliche Komplexität fürunordered_multiset
undunordered_multimap
wird proportional zuN
(aber worst-case) Die Komplexität bleibtO(N2)
, z. B. für einen pathologisch schlechten Hash Funktion).
Beispiel:
%Vor%std::sort
Sie können sortierte Kopien Ihrer Reichweite vergleichen. Gemäß dem Standard (N3337, § 25.4.1.1) hat es O(n * log(n))
complexity:
Komplexität: O (N log (N)) (wobei N == last - first) Vergleiche.
Beispiel:
%Vor%Tags und Links arrays c++ vector containers compare