web-dev-qa-db-fra.com

vérifier si un std :: vector contient un certain objet?

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

236
jmasterx

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 */
}
465
You

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()....

91
AshleysBrain

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".

11
NeilDurant