IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

recherche dans un vector


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut recherche dans un vector
    Bonjour

    Je suis à la recherche des possibilités de recherche disponible pour un vector<T>.

    Je suis dans le cas suivant :

    - un vector de float (voire double) contenant de quelques centaines à quelques milliers d'élément
    - le vecteur est déjà trié
    - plusieurs élément peuvent avoir la même valeur

    Ce que je souhaite, c'est récupéré les indices des éléments ayant une valeur x.

    Est-ce possible avec ce qui est fourni par STL ? Ou dois-je développer quelque chose moi-même ?

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour,
    siton vector est trié tu peut utiliser :
    equal_range()
    http://r0d.developpez.com/articles/algos-stl/#LII-F-4

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ca à l'air pas mal.

    Mais d'après ce que j'ai lu et testé, cette fonction me retourne les valeurs. Moi ce que je veux ce sont les index.

    Par exemple, pour l'exemple de la page que tu m'a indiqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    std::vector<int> v = {1,2,4,4,6,7}; // ne compile pas (cf. chapitre 2.0)
    std::pair<std::vector<int>::iterator, std::vector<int>::iterator> newRange ;
    newRange = std::equal_range(v.begin(), v.end(), 4) ;
    // resultat : r.first pointe sur le 3eme élément de v, f.second pointe sur le 5eme élément de v (6)
    je voudrais récupérer 2 et 4 (index de la 1e valeur après celle recherchée)

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Ca te retourne des itérateurs qui peuvent être vus comme des curseurs sur le conteneur. Pour obtenir une traduction vers les index tu peux calculer la distance entre v.begin() et un autre itérateur de v en utilisant std::distance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::distance( v.begin(), newRange.first );
    MAT.

  5. #5
    Invité
    Invité(e)
    Par défaut
    parfait, merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche motif dans un vector<struct>
    Par leila32 dans le forum C++
    Réponses: 4
    Dernier message: 29/03/2013, 14h07
  2. Réponses: 5
    Dernier message: 10/06/2011, 11h03
  3. recherche d'un objet de type tableau dans un vector
    Par sandy07 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/06/2007, 09h16
  4. recherche du minimum dans un vector
    Par javamax dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 22/10/2006, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo