Wie kann ich überprüfen, ob ein Vektor eine Teilmenge eines anderen ist?
-
28-09-2019 - |
Frage
Zur Zeit, ich glaube, meine beste Option ist std :: set_intersection zu verwenden, und dann prüfen, ob die Größe des kleineren Eingangs ist das gleiche wie die Anzahl der Elemente von set_intersection gefüllt.
Gibt es eine bessere Lösung?
Lösung
Versuchen Sie diese:
if (std::includes(set_one.begin(), set_one.end(),
set_two.begin(), set_two.end()))
{
// ...
}
Über enthält () .
enthält () Algorithmus vergleicht zwei sortierten Sequenzen und gibt true zurück, wenn jedes Element im Bereich [start2, Finish2) in dem Bereich enthalten [Start1, Ende1). Es gibt false zurück Andernfalls. enthält () geht davon aus, dass die Sequenzen werden unter Verwendung sortiert operator <() oder mit dem Prädikat comp.
läuft in
Bei den meisten ((Ende1 - Start1) + (Finish2 - start2)) * 2 -. 1 Vergleiche durchgeführt werden
Plus O (nlog (n)) für Vektoren zu sortieren. Sie werden es nicht schneller jeder als das.