Bonjour,
Comment savoir le plus rapidement possible si un élément existe déjà dans un std::set?
Je vous remercie par avance.
Cordialement,
Rodrigue
Bonjour,
Comment savoir le plus rapidement possible si un élément existe déjà dans un std::set?
Je vous remercie par avance.
Cordialement,
Rodrigue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 std::set<T> monSet; T elementATrouver; if(monSet.find(elementATrouver)!=monSet.end()) { // l'element est dedans } else // monSet.find(elementATrouver)==monSet.end() { // l'element n'est pas dedans }
Merci! Je pensais à la même chose. Que penses-tu du fait d'utiliser un hash_set plutôt qu'un set?
http://www.sgi.com/tech/stl/hash_set.html
Comme ce n'est pas un conteneur standard, tu n'es pas sûr de l'avoir partout
Pareil que Miles, plus le fait que je n'ai jamais eu de problèmes de performance avec des set, même contenant plusieurs millions d'éléments (dans mon cas, un ensemble de voxels d'un objet 3D).
Ok! Merci beaucoup pour toutes ses infos
Roulious tu travailles sur quel type d'application? Pour ma part, je m'amuse sur des calculs de radiosité... Mais au-delà d'un certains nombres d'éléments c'est impossible d'inverser cette satanée matrice . J'utilise Gauss-Seidel pour le moment, peut-être qu'il faudrait que je me tourne la technique de relaxation...
Pourquoi ne pas faire une pseudo inverse ?
A vrai dire je ne suis pas capable de te répondre comme ça, il faudrait que cette méthode. Je dois inverser des matrices 10000x10000, est-ce que c'est capable de faire ça en un temps raisonnable?
En fait, uen pseudo inverse, c'est tu prends une diagonalisation de la matrice, tu inverses les vp pas trop petites et tu remultiplies.
Je pense que Gauss Seidel ainsi que la méthode de relaxation sont bien plus rapides. Il s'agit d'algo itératif...
std::set<>::count()
count retourne le nombre d'éléments répondant favorablement à la question posée.
Et pour un set -> 1 ou 0. Plus simple à utiliser qu'un find. find qui sera à privilégier (p/r à count) sur les multi_set.
Juste par curiosité : en regardant ce que fait la libstdc++ pour set::count, on s'aperçoit que c'est juste un wrapper autour de find :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 size_type count(const key_type& __x) const { return _M_t.find(__x) == _M_t.end() ? 0 : 1; }
Oui tout à fait. Et c'est probablement la même chose pour les autres implémentation. C'est juste pour simplifier l'écriture.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager