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 :

STL set et type complex


Sujet :

SL & STL C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut STL set et type complex
    Bonjour

    Je cherche à utiliser un set pour y ranger des types double[2], mais je ne vois pas trop comment m'y prendre.

    En fait j'utilse fftw qui manipule des valeurs complexes à l'aide d'un typedef double fftw_complex[2] et j'aurais penser que set<fftw_complex> symb m'aurait permis de le faire. Mais à priori fftw_complex n'est pas un type reconnu par le set.

    D'un coté, celà ne m'étonne pas vu que le set peut être ordonné, je vois mal, comment il peut ordonné un complexe à moins qu'on lui dise explicitement dans quel sens on tourne(cadran du cercle trigo).


    Si quelqu'un à une idée pour faire celà...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Points : 307
    Points
    307
    Par défaut
    Déjà, mieux vaut utiliser la structure complexe, présente dans le standard. Ensuite, tu peux passer à set un critère de comparaison de deux de ses éléments. Ce critère peut utiliser soit la vision trigo des complexes, soit les voir simplement comme une paire, et faire un ordre lexicographique sur ton complexe.

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Il faut surtout avoir un moyen de comparer des fftw_complex. Quand tu auras ça, tu pourras faire un std::set.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    et j'aurais penser que set<fftw_complex> symb m'aurait permis de le faire.
    Si tu avais pensé ça, tu n'avais probablement pas lu les pré-requis de std::set.
    Cela n'est pas possible dans ton cas pour plusieurs raisons.
    Boost ftw

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par loufoque
    Si tu avais pensé ça, tu n'avais probablement pas lu les pré-requis de std::set.
    Cela n'est pas possible dans ton cas pour plusieurs raisons.
    C'est à dire? Hormis le fait que set ne sait pas comment ranger les éléments (car si j'ai bien compris, set les ordonne), je vois pas ce qui m'empêche de faire un set d'un type autre que les types existants dans le standard.

    Citation Envoyé par roulious
    Déjà, mieux vaut utiliser la structure complexe, présente dans le standard
    oui je peux aussi utiliser la structure associé à complex.h mais vu que c'est la structure employé par fftw...

    Citation Envoyé par Miles
    Il faut surtout avoir un moyen de comparer des fftw_complex. Quand tu auras ça, tu pourras faire un std::set.
    Oui complètement d'accord avec celà et c'est d'ailleurs ce que sugère roulious en disant
    Ensuite, tu peux passer à set un critère de comparaison de deux de ses éléments. Ce critère peut utiliser soit la vision trigo des complexes, soit les voir simplement comme une paire, et faire un ordre lexicographique sur ton complexe.
    Je vais donc voir à utiliser le type complex standard et sinon, je me penche sur la manière de comparer mes complexes (version trigo) et faire comprendre à set comment les ranger. Ce qui est dommage, c'est que l'ordre ne m'interesse pas, je cherche juste à dégager les doublons.

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Alors pourquoi ne pas utiliser un vector trié ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    je vois pas ce qui m'empêche de faire un set d'un type autre que les types existants dans le standard.
    Le fait que ton type ne soit pas CopyConstructible et Assignable.
    Boost ftw

  8. #8
    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
    Citation Envoyé par jguillot
    Je vais donc voir à utiliser le type complex standard et sinon, je me penche sur la manière de comparer mes complexes (version trigo) et faire comprendre à set comment les ranger. Ce qui est dommage, c'est que l'ordre ne m'interesse pas, je cherche juste à dégager les doublons.
    Si l'ordre ne t'intéresse pas, je te conseille la comparaison lexicale, elle est plus simple à programmer, et plus rapide à exécuter.
    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.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par loufoque
    Le fait que ton type ne soit pas CopyConstructible et Assignable.
    Mais à partir du moment où l'on définit l'opérateur d'affection et de comparaison à ce type, ça devient possible c'est çà?

  10. #10
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Tu ne peux pas définir l'affectation pour les tableaux...
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Tu ne peux pas définir l'affectation pour les tableaux...
    ???

    Que veut tu dire par là?
    Désolé mais je trouve la plupart des réponses formulés précedemment un peu courtes, je dois être un peu plus long que les autres à comprendre, donc si vous pouviez en dire plus...

    Je résume ce que je souhaite maintenant faire (ça a un peu changé)

    Je désire créer une matrice contenant les coeff de la fft. chacun des coeff étant complexe, il y a plusieurs façons de le faire (utilsation de std::complex, utilisation de type non standard tel celui de boost ou fftw, voir créer ma propre classe complexe).
    Je souhaite ensuite associé à chacun des coeff (complexe) une variable symbolique du type A0 A1 A2... (là je me disais qu'un set aurait été le bienvenue en raison de l'unicité des valeurs)

    Pour des raisons évidentes de complexité algorithmique mon premier choix avait été de me tourner vers fftw mais finalement en ecrivant l'algo correctement on obtient facilement du n*log(n) alors à moins que fftw soit vraiment obligatoire, j'aimerai m'en passer (il faut inlcure les dll au projet et sous visual les dll de fft sont casse pieds).

    Il me faut donc une matrice de complexes, une matrice de string (quid de l'allocation mémoire) un set ou une list ou autres permettant de faire le lien entre les éléments complexes et les variables symboliques.

    Quel est la structure et type de données que vous me conseilleriez?

    D'avance merci pour votre aide

  12. #12
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    unordered_map<std::string, std::complex<double> > si j'ai bien compris.
    Boost ftw

  13. #13
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par jguillot
    Que veut tu dire par là?
    Qu'il n'y a pas d'operateur = pour les tableaux et que tu ne peux pas en definir un.

    Désolé mais je trouve la plupart des réponses formulés précedemment un peu courtes, je dois être un peu plus long que les autres à comprendre, donc si vous pouviez en dire plus...
    C'est difficile de savoir ce que savent les autres. On a tendance a supposer une connaissance minimale du langage... on ne va pas reprendre tout ab initio a chaque fois que quelqu'un pose une question.

    Quel est la structure et type de données que vous me conseilleriez?
    Je ne suis pas plus sur que Loufoque d'avoir compris et je n'ai pas mieux comme proposition que la sienne dans le contexte que j'ai compris.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet
    Qu'il n'y a pas d'operateur = pour les tableaux et que tu ne peux pas en definir un.

    Ah tu veux donc dire que si je crée deux tableaux à deux dimensions de même taille A[n][m] et B[n][m] par exemple, je ne peux pas après avoir rempli B faire un A = B... c'est bien ça... Par contre si je crée une classe matrice c bon?
    Citation Envoyé par Jean-Marc.Bourguet
    C'est difficile de savoir ce que savent les autres. On a tendance a supposer une connaissance minimale du langage... on ne va pas reprendre tout ab initio a chaque fois que quelqu'un pose une question.
    Tu as parfaitement raison, ça n'empêche qu'une réponse ça peut aussi se construire avec un sujet+verbe+complement (le prenez pas mal... ), mais je comprends aussi que si il faut mettre une tartine pour chaque post vous allez faire moins de post à la journée et ça ne rend pas forcément service à la communauté, donc finalement j'ai rien dis...
    Citation Envoyé par Jean-Marc.Bourguet
    Je ne suis pas plus sur que Loufoque d'avoir compris et je n'ai pas mieux comme proposition que la sienne dans le contexte que j'ai compris.
    Si si je pense que vous avez bien compris. Vous me conseillez donc un map dont la clé est la variable symbolique c'est ça?

  15. #15
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par jguillot
    Ah tu veux donc dire que si je crée deux tableaux à deux dimensions de même taille A[n][m] et B[n][m] par exemple, je ne peux pas après avoir rempli B faire un A = B... c'est bien ça... Par contre si je crée une classe matrice c bon?
    Parfait.

    Tu as parfaitement raison, ça n'empêche qu'une réponse ça peut aussi se construire avec un sujet+verbe+complement (le prenez pas mal... ),
    Il me semble que generalement ce que j'ecris est comprehensible si on a un minimum de base.

    mais je comprends aussi que si il faut mettre une tartine pour chaque post vous allez faire moins de post à la journée et ça ne rend pas forcément service à la communauté, donc finalement j'ai rien dis...
    Ou bien je n'ecrirais rien du tout parce que ca me gonflerait. Je reponds parce que ca m'apporte quelque chose, pas particulierement pour le bien de la communaute.

    Si si je pense que vous avez bien compris. Vous me conseillez donc un map dont la clé est la variable symbolique c'est ça?
    Oui.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Alors maintenant ok mon map associe bien une variable symbolique à chaque élément complexe. Les variables symboliques existe de manière unique dans le map et c'est tant mieux. Par contre un point m'echappe... comment m'assurer que deux complexes identiques ne soit voit pas assigner des variables symboliques différentes. C'est pour cette raison qu'au départ je souhaitais utiliser un set, pour avoir unicité des valeurs et non unicité de la clé string... si il n'y pas moyen d'utiliser un set je part donc sur une complexité en n² (pas tip top vu la taille des fft mais bon si y a pas d'autres choix).

  17. #17
    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
    En fait, ce que tu voudrais, ce n'est pas un set, mais un bi-map : Qui puisse mapper de string vers complexe, mais aussi de complexe vers string.

    Il n'y a pas cette structure de donnée en standard en C++. Il y a eu un projet d'ajouter ça dans boost, dans le cadre d'un google summer of code, je ne sais pas si ça a abouti. L'idée était de baser ça sur boost::multi_index. Par contre, boost::multi_index n'est pas hyper simple à utiliser au début (c'est pourquoi ils voulaient faire un wrapper pour la cas particulier des bi-map).

    Si tu n'as pas trop de contraintes de place, tu dois pouvoir t'en tirer à moindre coût, en utilisant 2 map : une map<string, complex>, et une map<complex, string>. Le tout, c'est de bien t'assurer que quand tu ajoutes/enlève/... un élément dans une map, tu fais bien ce qu'il faut pour l'autre.

    J'ai compté mes phrases, j'ai bien l'impression qu'il y a autant de sujet que de verbes, et des COD, COI, COS en nombre raisonnable
    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.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par JolyLoic
    J'ai compté mes phrases, j'ai bien l'impression qu'il y a autant de sujet que de verbes, et des COD, COI, COS en nombre raisonnable
    Merci....

    Je vais voir pour ta solution bi-map... je pense pas me tourner vers boost pour le moment. On a exigé de moi que je prenne pas fftw c'est pas pour retomber sur boost (quoi que j'ai quand même l'impression de réinventer la roue... )

    Merci pour le coup de main...

  19. #19
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par jguillot
    Merci....

    Je vais voir pour ta solution bi-map... je pense pas me tourner vers boost pour le moment. On a exigé de moi que je prenne pas fftw c'est pas pour retomber sur boost (quoi que j'ai quand même l'impression de réinventer la roue... )

    Merci pour le coup de main...
    Y'a tout de même une sacrée différence au niveau de la licence entre FFTW et Boost !

  20. #20
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Y'a un exemple pour faire des bimap avec multi_index.
    http://boost.org/libs/multi_index/example/bimap.cpp

    Tu n'as probablement pas besoin que ce soit ordonné par contre, donc tu peux modifier pour utiliser des fonctions de hachage.
    Boost ftw

Discussions similaires

  1. Service Web avec Axis et types complexes.
    Par Skyman37 dans le forum Services Web
    Réponses: 17
    Dernier message: 13/01/2011, 09h28
  2. [type complex] problemes bizzards lors de la deserialisation
    Par djynwk dans le forum Services Web
    Réponses: 6
    Dernier message: 23/11/2006, 18h43
  3. [Débutant] Tag Text et type "complexe" ?
    Par DemonKN dans le forum Struts 1
    Réponses: 14
    Dernier message: 22/09/2006, 10h01
  4. STL, set
    Par radium dans le forum SL & STL
    Réponses: 1
    Dernier message: 17/11/2005, 14h46
  5. Type complexe en parametre dans une procedure stockée
    Par Tsimplice dans le forum Oracle
    Réponses: 2
    Dernier message: 06/10/2005, 02h42

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