Wie überprüft man, ob ein Vektor eine Teilmenge eines anderen in C ++ ist?

8

Ich versuche einen einfachen Weg zu finden, um zu überprüfen, ob ein Vektor eine Untermenge eines anderen ist, ohne die Reihenfolge der Elemente im Vektor zu sortieren. Beide Vektoren enthalten Zufallszahlenelemente in ihnen.

std::includes scheint nur für sortierte Bereiche zu funktionieren. Wie kann ich das erreichen?

    
Praveen 02.08.2011, 01:54
quelle

4 Antworten

15

Kopieren Sie die Vektoren. Sortieren Sie die Kopien. Dann verwende std::includes auf den Kopien.

%Vor%     
Benjamin Lindley 02.08.2011, 02:03
quelle
7

Meine Antwort geht davon aus, dass Sie, wenn Sie "subset" sagen, mehr nach dem Äquivalent einer "substring" suchen; Das heißt, die Reihenfolge der Elemente während der Suche beibehalten.

Letztlich kann ich nicht sehen, wie Sie das in etwas weniger als O(n*m) tun können. In Anbetracht dessen können Sie einfach Ihre eigenen ganz einfach rollen:

%Vor%

Live-Demo.

(Sie könnten mit den Vorlagenparametern wahrscheinlich kreativer sein.)

    
quelle
3

Das geht davon aus, dass Duplikate NICHT wichtig sind. Wenn Sie also zwei Instanzen der Zahl 99 in Vektor a haben, dann wird, solange Vektor b mindestens eine Instanz der Zahl 99 hat, diese als Teilmenge deklariert.

%Vor%     
Andrew Rasmussen 02.08.2011 01:59
quelle
0

Ohne Sortieren ...

%Vor%     
thayne 20.12.2017 22:48
quelle

Tags und Links