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 :

Tri avec une fonction surchargee


Sujet :

SL & STL C++

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Points : 545
    Points
    545
    Par défaut Tri avec une fonction surchargee
    Supposons que j'ai 2 fonctions de tri comme :

    bool less(int, int) {...}
    bool less(float,float) {...}

    et que j'utilise un algo de tri comme :
    std::vector<int> v;
    ...
    std::sort(v.begin(), v.end(), less);

    Et bien la, il part en erreur car il a 2 fonctions less surchargees et il ne sait pas laquelle des 2 utiliser.
    Sachant que je ne peux pas utiliser de templates dans less, comment je peux faire en sorte que l'algo std::sort trouve la bonne fonction less.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par vandamme Voir le message
    Supposons que j'ai 2 fonctions de tri comme :

    bool less(int, int) {...}
    bool less(float,float) {...}

    et que j'utilise un algo de tri comme :
    std::vector<int> v;
    ...
    std::sort(v.begin(), v.end(), less);

    Et bien la, il part en erreur car il a 2 fonctions less surchargees et il ne sait pas laquelle des 2 utiliser.
    Sachant que je ne peux pas utiliser de templates dans less, comment je peux faire en sorte que l'algo std::sort trouve la bonne fonction less.
    Pourquoi tu ne peut pas utiliser de template??
    sinon ben nome les différemment

  3. #3
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Citation Envoyé par vandamme Voir le message
    ..
    std::sort(v.begin(), v.end(), std::less<int>());
    ou
    std::sort(v.begin(), v.end(), std::less<float>());
    Pour des floats. Ou est le soucis ?

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Si vraiment tu ne veux pas de templates, et que tu ne veux/peux pas renommer tes fonctions, tu peux toujours faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    bool less(int, int) {...}
    bool less(float,float) {...}
     
    std::vector<int> v;
    ...
    bool (*lessInt)(int, int) = &less; // Ici, le contexte permet de sélectionner la bonne surcharge
     
    std::sort(v.begin(), v.end(), lessInt);
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Points : 545
    Points
    545
    Par défaut
    Je ne peux pas utiliser de templates car j'ai simplifie mon code avec les types int et float.
    Mais les 2 types que j'utilise dans les conteneurs n'ont pas du tout le meme comportement donc template impossible. Par contre la derniere solution proposee est exactement ce qu'il me fallait.

Discussions similaires

  1. [Lisp] Communiquer avec une fonction en c++
    Par Nadine dans le forum Lisp
    Réponses: 5
    Dernier message: 10/01/2005, 20h15
  2. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  3. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15
  4. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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