Comment puis-je vérifier si un vecteur est un sous-ensemble d'une autre?
-
28-09-2019 - |
Question
À l'heure actuelle, je pense que ma meilleure option est d'utiliser std :: set_intersection, puis vérifier si la taille de l'entrée plus petite est le même que le nombre d'éléments remplis par set_intersection.
Y at-il une meilleure solution?
La solution
Essayez ceci:
if (std::includes(set_one.begin(), set_one.end(),
set_two.begin(), set_two.end()))
{
// ...
}
A propos de comprend () .
L'algorithme comprend () compare deux séquences triées et renvoie vrai si chaque élément dans l'intervalle [start2, finish2) est contenu dans la plage [Start1, Fin1). Il retourne false autrement. comprend () suppose que le Les séquences sont triées en utilisant opérateur <(), ou en utilisant le prédicat comp.
fonctionne dans
Au plus ((Fin1 - start1) + (finish2 - start2)) * 2. - 1 comparaisons sont effectuées
De plus O (nlog (n)) pour des vecteurs de tri. Vous ne l'obtiendrez pas plus vite que cela.