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 du dernier élément inféieur à une valeur dans une liste


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut Recherche du dernier élément inféieur à une valeur dans une liste
    Salut,

    J'ai une structure dont je compte stocker plusieurs exemplaires dans une liste (std::set je pense) avec un critère de tri portant sur un des champs "time" de la liste (qui est un double).

    Cette liste étant construite (donc triée par apport à "time") je voudrais trouver la méthode la plus rapide pour trouver le dernier élément dont le champ "time" est inféieur à une certaine valeur donnée.

    Comment faire plus efficacement que le parcours depuis zéro ?

    Merci

  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
    Salut est tu sur que le set est celui que tu as besoin?
    Si le trie ne se fait qu'une fois, utilise un vector et l'algo sort.

    Pour ta réponse, comme ton ensemble sera triée, utilise l'algo upper_bound() (utilise la recherche binaire)
    http://r0d.developpez.com/articles/algos-stl/#LII-C-3-2
    Tu aura juste à faire -- sur l'iterator pour avoir ton élément

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // ne compile pas
    std::vector<int> v = {1,2,4,6,9}; 
    //it va pointer sur 6
    std::vector<int>::iterator it = std::upper_bound( v.begin(), v.end(), 5 );
    //on pointe sur l'élément d'avant : 4
    --it;

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Salut est tu sur que le set est celui que tu as besoin?
    Si le trie ne se fait qu'une fois, utilise un vector et l'algo sort.

    Pour ta réponse, comme ton ensemble sera triée, utilise l'algo upper_bound() (utilise la recherche binaire)
    http://r0d.developpez.com/articles/algos-stl/#LII-C-3-2
    Tu aura juste à faire -- sur l'iterator pour avoir ton élément

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // ne compile pas
    std::vector<int> v = {1,2,4,6,9}; 
    //it va pointer sur 6
    std::vector<int>::iterator it = std::upper_bound( v.begin(), v.end(), 5 );
    //on pointe sur l'élément d'avant : 4
    --it;
    Oui je souhaite utiliser un set (ou une map) car le contenu de la liste varie entre deux calcul du plus grand inférieur. Je ne veux pas avoir à réfléchir à l'endroit où j'insère un nouvel élément donc il me faut un conteneur qui s'ordonne tout seul.

    Sinon merci pour upper_bound je pense que je vais pouvoir me débrouiller avec.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 8
    Dernier message: 28/11/2011, 11h40
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Réponses: 1
    Dernier message: 25/09/2006, 17h15
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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