Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1744 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] STL map et sort

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] STL map et sort

n°298204
alligator4​21
Posté le 31-01-2003 à 19:10:19  profilanswer
 

J'ai une map de la stl qui est definie comme suit :
 
 
 

Code :
  1. ...
  2. class ma_classe
  3. {
  4.     private:
  5.     ...
  6.     public:
  7.     ma_classe();
  8.     ~ma_classe();
  9.     int nombre;
  10.     ...
  11. };
  12. std::map<int, ma_classe *> ma_map;
  13. sort(ma_map.begin(),ma_map.end(),compare_moi_tout_ca);

 
 
J'aimerais savoir comment faire un sort de la map selon la variable membre ma_classe::nombre
J'ai essaye ca et qq variantes mais le compilo ne digere pas :
 

Code :
  1. class compare_moi_tout_ca : public std::binary_function<ma_classe * , ma_classe * ,bool>
  2. {
  3. public:
  4. bool operator()( ma_classe * x , ma_classe * y) const
  5. {return ((x->nombre) < (y->nombre));}
  6. };

 
 

mood
Publicité
Posté le 31-01-2003 à 19:10:19  profilanswer
 

n°298207
Taz
bisounours-codeur
Posté le 31-01-2003 à 19:15:15  profilanswer
 

ça n'a pas de sens de trier une map puisque dans sa structure interne, elle obéit déjà à un critère : less<KeyType> par défaut ou tout autre fonction passée en troisième paramètre. de toute façon map ne fournit pas de RandomAccessIterator
 
ça veut dire quoi pas digéré?


Message édité par Taz le 31-01-2003 à 19:21:04
n°298266
alligator4​21
Posté le 31-01-2003 à 21:34:04  profilanswer
 

indigestion ...  
ben indigeste quoi :D
 

Code :
  1. g++ -Wall -ansi -I/usr/include -c main.cpp
  2. /usr/include/g++/bits/stl_algo.h: In function `void
  3.    std::sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with
  4.    _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int,
  5.    ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned
  6.    int, ma_classe*>*>, _Compare = compare_moi_tout_ca]':
  7. main.cpp:436:   instantiated from here
  8. /usr/include/g++/bits/stl_algo.h:2209: no match for `
  9.    std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>,
  10.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  11.    ma_classe*>*>& - std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>,
  12.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  13.    ma_classe*>*>&' operator
  14. /usr/include/g++/bits/stl_algo.h: In function `void
  15.    std::__final_insertion_sort(_RandomAccessIter, _RandomAccessIter, _Compare)
  16.    [with _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned
  17.    int, ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const
  18.    unsigned int, ma_classe*>*>, _Compare = compare_moi_tout_ca]':
  19. /usr/include/g++/bits/stl_algo.h:2210:   instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int, ma_classe*>*>, _Compare = compare_moi_tout_ca]'
  20. main.cpp:436:   instantiated from here
  21. /usr/include/g++/bits/stl_algo.h:2074: no match for `
  22.    std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>,
  23.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  24.    ma_classe*>*>& - std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>,
  25.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  26.    ma_classe*>*>&' operator
  27. /usr/include/g++/bits/stl_algo.h:2075: no match for `
  28.    std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>,
  29.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  30.    ma_classe*>*>& + std::<anonymous enum>' operator
  31. /usr/include/g++/bits/stl_algo.h:2076: no match for `
  32.    std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>,
  33.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  34.    ma_classe*>*>& + std::<anonymous enum>' operator
  35. /usr/include/g++/bits/stl_algo.h: In function `void
  36.    std::__insertion_sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with
  37.    _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int,
  38.    ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned
  39.    int, ma_classe*>*>, _Compare = compare_moi_tout_ca]':
  40. /usr/include/g++/bits/stl_algo.h:2079:   instantiated from `void std::__final_insertion_sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int, ma_classe*>*>, _Compare = compare_moi_tout_ca]'
  41. /usr/include/g++/bits/stl_algo.h:2210:   instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int, ma_classe*>*>, _Compare = compare_moi_tout_ca]'
  42. main.cpp:436:   instantiated from here
  43. /usr/include/g++/bits/stl_algo.h:2004: no match for `
  44.    std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>,
  45.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  46.    ma_classe*>*>& + int' operator
  47. /usr/include/g++/bits/stl_algo.h:2079:   instantiated from `void std::__final_insertion_sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int, ma_classe*>*>, _Compare = compare_moi_tout_ca]'
  48. /usr/include/g++/bits/stl_algo.h:2210:   instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int, ma_classe*>*>, _Compare = compare_moi_tout_ca]'
  49. main.cpp:436:   instantiated from here
  50. /usr/include/g++/bits/stl_algo.h:2007: no match for call to `(compare_moi_tout_ca) (
  51.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  52.    ma_classe*>&)'
  53. main.cpp:32: candidates are: bool compare_moi_tout_ca::operator()(ma_classe*, ma_classe*) const
  54. /usr/include/g++/bits/stl_algo.h:2008: no match for `
  55.    std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>,
  56.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  57.    ma_classe*>*>& + int' operator
  58. /usr/include/g++/bits/stl_algo.h: In member function `std::pair<const unsigned
  59.    int, ma_classe*>& std::pair<const unsigned int, ma_classe*>::operator=(const
  60.    std::pair<const unsigned int, ma_classe*>&)':
  61. /usr/include/g++/bits/stl_algo.h:2009: non-static const member `const unsigned
  62.    int std::pair<const unsigned int, ma_classe*>::first', can't use default
  63.    assignment operator
  64. /usr/include/g++/bits/stl_algo.h: In function `void
  65.    std::__unguarded_linear_insert(_RandomAccessIter, _Tp, _Compare) [with
  66.    _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int,
  67.    ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned
  68.    int, ma_classe*>*>, _Tp = std::pair<const unsigned int, ma_classe*>, _Compare =
  69.    compare_moi_tout_ca]':
  70. /usr/include/g++/bits/stl_algo.h:2012:   instantiated from `void std::__insertion_sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int, ma_classe*>*>, _Compare = compare_moi_tout_ca]'
  71. /usr/include/g++/bits/stl_algo.h:2079:   instantiated from `void std::__final_insertion_sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int, ma_classe*>*>, _Compare = compare_moi_tout_ca]'
  72. /usr/include/g++/bits/stl_algo.h:2210:   instantiated from `void std::sort(_RandomAccessIter, _RandomAccessIter, _Compare) [with _RandomAccessIter = std::_Rb_tree_iterator<std::pair<const unsigned int, ma_classe*>, std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int, ma_classe*>*>, _Compare = compare_moi_tout_ca]'
  73. main.cpp:436:   instantiated from here
  74. /usr/include/g++/bits/stl_algo.h:1961: no match for call to `(compare_moi_tout_ca) (
  75.    std::pair<const unsigned int, ma_classe*>&, std::pair<const unsigned int,
  76.    ma_classe*>&)'
  77. main.cpp:32: candidates are: bool compare_moi_tout_ca::operator()(ma_classe*, ma_classe*) const
  78. make: *** [main.o] Error 1

 
 
bon je dois conclure que il n'y a pas moyen d'ordonner une map de la maniere dont on veut ?
ca me parait bizarre.

n°298267
Taz
bisounours-codeur
Posté le 31-01-2003 à 21:38:21  profilanswer
 

j'en déduis que tu sais pas lire  :pfff:

n°298271
alligator4​21
Posté le 31-01-2003 à 21:41:32  profilanswer
 

ah oui c'est bien possible :)

n°298272
Taz
bisounours-codeur
Posté le 31-01-2003 à 21:42:08  profilanswer
 

alligator421 a écrit :

ah oui c'est bien possible :)

t'as compris alors?

n°298278
alligator4​21
Posté le 31-01-2003 à 21:47:16  profilanswer
 

bah pas vraiment :/
a part le no-match .... pati pata ... random acess iterator
et de fait sur www.sgi.com/tech/stl , seul deque et vector procure un random access iterator
enfin bon c'est sympa mais il y a bien un work-around pour trier cette map quand meme non ?

n°298279
LeGreg
Posté le 31-01-2003 à 21:49:19  profilanswer
 

alligator421 a écrit :


enfin bon c'est sympa mais il y a bien un work-around pour trier cette map quand meme non ?


 
la map est deja triee
l'ordre est fixe a la creation par le predicat
less passe en parametre du template.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°298281
Taz
bisounours-codeur
Posté le 31-01-2003 à 21:51:19  profilanswer
 

t'es long à viendre ou tu comprends vite mais faut t'expliquer longtemps?

n°298286
alligator4​21
Posté le 31-01-2003 à 21:55:19  profilanswer
 

legreg a écrit :


 
la map est deja triee
l'ordre est fixe a la creation par le predicat
less passe en parametre du template.
 
LeGreg
 


 
 
mmmh
bon ca n'arrange pas mes affaires tout ca.
je vais devoir prendre chaque value correspondant aux keys et regarder ce que je veux dedans pour mettre dans un autre container.
 
Merci tous les deux pour vos reponses.
 
:hello:
 
 
 
 
 
 

mood
Publicité
Posté le 31-01-2003 à 21:55:19  profilanswer
 

n°298290
alligator4​21
Posté le 31-01-2003 à 21:57:58  profilanswer
 

++Taz a écrit :

t'es long à viendre ou tu comprends vite mais faut t'expliquer longtemps?


 
pas la peine de me secouer, je suis deja parti.

n°298292
Taz
bisounours-codeur
Posté le 31-01-2003 à 21:58:38  profilanswer
 

:heink: tu comprends bien qu'on peut avoir un autre ordre que less? c'est réorganiser la map qui impossible. il faut en créer une autre avec un autre prédicat.

n°298296
alligator4​21
Posté le 31-01-2003 à 22:02:40  profilanswer
 

++Taz a écrit :

:heink: tu comprends bien qu'on peut avoir un autre ordre que less? c'est réorganiser la map qui impossible. il faut en créer une autre avec un autre prédicat.


 
si j'ai compris, mais ca ne m'arrange pas (voir mon premier post)
je voulais faire un sort sur la valeur pas sur la key less<keytype>.  
De plus ma map est deja cree.

n°298302
Taz
bisounours-codeur
Posté le 31-01-2003 à 22:07:25  profilanswer
 

effectivement...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] STL map et sort

 

Sujets relatifs
STL - Comment faire l'équivalent d'un "trim" sur une basic_stringDu C au C++ avec STL: probleme resolu mais non compris
[STL] fonctions adaptees a mes besoins ????[STL] vector/list de structures, recherche d'elements de la structure
des ptites questions sur la STL et sur stringVitesse d'execution de code STL sous VisualC++ !?!?
Librairies statiques, sousprojets et STLPb d'"allocation mémoire avec STL string
Envie de codage -> Un sort de TCHAT mais connais rien !Recupération de contenu apres SORT
Plus de sujets relatifs à : [C++] STL map et sort


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR