Prova questa:
if (std::includes(set_one.begin(), set_one.end(),
set_two.begin(), set_two.end()))
{
// ...
}
Chi includes().
Il include() algoritmo confronta due sequenze ordinate e restituisce vero se ogni elemento nel range [start2, finish2) è contenuta nel range [start1, Finish1). In caso contrario restituisce false . include() presuppone che le sequenze siano ordinate utilizzando l'operatore <() o utilizzando il predicato comp.
viene eseguito in
presso la maggior parte ((Finish1 - start1) + (finish2 - start2)) * 2 - vengono effettuate 1 confronti.
Più O (nlog (n)) per l'ordinamento di vettori. Non lo capirai più velocemente di così.
Credo che std :: set_intersection funzionerà come sopra (cioè (2 * (count1 + count2)) - 1 operazioni) – Nim
Beh, il caso peggiore è lo stesso, ma se il risultato è falso l'include farà il suo lavoro più veloce. E tu usi anche un altro vettore in intersezione. Poiché i nomi suggeriscono che set_intersection dovrebbe essere usato per trovare quell'intersezione e include per verificare se un set è un sottoinsieme di un altro. – Klark
se i tuoi dati sono in 'std :: set' puoi usare' std :: set_difference' –