Duplicate possible:
Comment trouver un élément dans un std :: vector?
Y a-t-il quelque chose dans <algorithm>
qui vous permette de vérifier si un std :: container contient quelque chose? Ou, une façon d'en faire un, par exemple:
if(a.x == b.x && a.y == b.y)
return true;
return false;
Cela ne peut-il être fait qu'avec std::map
puisqu'il utilise des clés?
Merci
Vérifier si v
contient l'élément x
:
#include <algorithm>
if(std::find(v.begin(), v.end(), x) != v.end()) {
/* v contains x */
} else {
/* v does not contain x */
}
Vérifier si v
contient des éléments (n'est pas vide):
if(!v.empty()){
/* v is non-empty */
} else {
/* v is empty */
}
Si la recherche d'un élément est importante, je recommanderais std::set
au lieu de std::vector
. En utilisant ceci:
std::find(vec.begin(), vec.end(), x)
s'exécute dans O(n) time, mais std::set
a son propre membre find()
(c'est-à-dire myset.find(x)
) qui s'exécute en O (log n ) temps - c'est beaucoup plus efficace avec un grand nombre d'éléments
std::set
garantit également que tous les éléments ajoutés sont uniques, ce qui vous évite d'avoir à faire quoi que ce soit comme if not contained then Push_back()...
.
Voir la question: Comment trouver un article dans un std :: vector?
Vous devrez également vous assurer que vous avez implémenté une operator==()
appropriée pour votre objet, si celle par défaut ne suffit pas pour un test d'égalité "en profondeur".