je cherche un composant (de la stl) qui permettent la chose suivante :
+ stocker une valeur (double) associée a un indice (quelconque, pas
forcement 0,1,2,...)
+ faire des op sur la valeur (+,/,*,...)
+ trier le couple (indice,valeur) par rapport aux valeurs
J'ai pense a map (ou multimap) mais il semble que le tri ne puisse se
faire que sur la 'key' et qu'on ne puisse pas demander facilement des op
sur la Data (avec les algo de la stl)
Existe-t-il un tel composant dans la stl ou faut-il que je cree une
classe specifiquement pour cette usage ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
adebaene
vincent daanen wrote in message news:<bvsr95$l35$...
Bonjour a tous Bonjour.
je cherche un composant (de la stl) qui permettent la chose suivante : + stocker une valeur (double) associée a un indice (quelconque, pas forcement 0,1,2,...) + faire des op sur la valeur (+,/,*,...) + trier le couple (indice,valeur) par rapport aux valeurs
J'ai pense a map (ou multimap) mais il semble que le tri ne puisse se faire que sur la 'key' et qu'on ne puisse pas demander facilement des op sur la Data (avec les algo de la stl) Exact, et en lus le tri est fait automatiquement à chaque modification
du contenu : tu n'as pas à le demander.
Existe-t-il un tel composant dans la stl ou faut-il que je cree une classe specifiquement pour cette usage ? Un vector<pair<cle, valeur> > (ou une list ou une dequeu à la place du
vector) peut-être?
Arnaud
vincent daanen <vdaanen_NO_SPAM@yahoo.fr> wrote in message news:<bvsr95$l35$1@trompette.imag.fr>...
Bonjour a tous
Bonjour.
je cherche un composant (de la stl) qui permettent la chose suivante :
+ stocker une valeur (double) associée a un indice (quelconque, pas
forcement 0,1,2,...)
+ faire des op sur la valeur (+,/,*,...)
+ trier le couple (indice,valeur) par rapport aux valeurs
J'ai pense a map (ou multimap) mais il semble que le tri ne puisse se
faire que sur la 'key' et qu'on ne puisse pas demander facilement des op
sur la Data (avec les algo de la stl)
Exact, et en lus le tri est fait automatiquement à chaque modification
du contenu : tu n'as pas à le demander.
Existe-t-il un tel composant dans la stl ou faut-il que je cree une
classe specifiquement pour cette usage ?
Un vector<pair<cle, valeur> > (ou une list ou une dequeu à la place du
vincent daanen wrote in message news:<bvsr95$l35$...
Bonjour a tous Bonjour.
je cherche un composant (de la stl) qui permettent la chose suivante : + stocker une valeur (double) associée a un indice (quelconque, pas forcement 0,1,2,...) + faire des op sur la valeur (+,/,*,...) + trier le couple (indice,valeur) par rapport aux valeurs
J'ai pense a map (ou multimap) mais il semble que le tri ne puisse se faire que sur la 'key' et qu'on ne puisse pas demander facilement des op sur la Data (avec les algo de la stl) Exact, et en lus le tri est fait automatiquement à chaque modification
du contenu : tu n'as pas à le demander.
Existe-t-il un tel composant dans la stl ou faut-il que je cree une classe specifiquement pour cette usage ? Un vector<pair<cle, valeur> > (ou une list ou une dequeu à la place du
vector) peut-être?
Arnaud
vincent daanen
vincent daanen wrote in message news:<bvsr95$l35$...
Bonjour a tous
Bonjour.
je cherche un composant (de la stl) qui permettent la chose suivante : + stocker une valeur (double) associée a un indice (quelconque, pas forcement 0,1,2,...) + faire des op sur la valeur (+,/,*,...) + trier le couple (indice,valeur) par rapport aux valeurs
J'ai pense a map (ou multimap) mais il semble que le tri ne puisse se faire que sur la 'key' et qu'on ne puisse pas demander facilement des op sur la Data (avec les algo de la stl)
Exact, et en lus le tri est fait automatiquement à chaque modification du contenu : tu n'as pas à le demander.
Existe-t-il un tel composant dans la stl ou faut-il que je cree une classe specifiquement pour cette usage ?
Un vector<pair<cle, valeur> > (ou une list ou une dequeu à la place du vector) peut-être?
Je vais essayer mais le tri d'une pair<cle, valeur> parsort se fait-il sur la cle ou la valeur ?? Dans mon cas, il faut imperativement que ce tri se fasse sur la valeur !!
Merci
Vince
vincent daanen <vdaanen_NO_SPAM@yahoo.fr> wrote in message news:<bvsr95$l35$1@trompette.imag.fr>...
Bonjour a tous
Bonjour.
je cherche un composant (de la stl) qui permettent la chose suivante :
+ stocker une valeur (double) associée a un indice (quelconque, pas
forcement 0,1,2,...)
+ faire des op sur la valeur (+,/,*,...)
+ trier le couple (indice,valeur) par rapport aux valeurs
J'ai pense a map (ou multimap) mais il semble que le tri ne puisse se
faire que sur la 'key' et qu'on ne puisse pas demander facilement des op
sur la Data (avec les algo de la stl)
Exact, et en lus le tri est fait automatiquement à chaque modification
du contenu : tu n'as pas à le demander.
Existe-t-il un tel composant dans la stl ou faut-il que je cree une
classe specifiquement pour cette usage ?
Un vector<pair<cle, valeur> > (ou une list ou une dequeu à la place du
vector) peut-être?
Je vais essayer mais le tri d'une pair<cle, valeur> parsort se fait-il
sur la cle ou la valeur ??
Dans mon cas, il faut imperativement que ce tri se fasse sur la valeur !!
vincent daanen wrote in message news:<bvsr95$l35$...
Bonjour a tous
Bonjour.
je cherche un composant (de la stl) qui permettent la chose suivante : + stocker une valeur (double) associée a un indice (quelconque, pas forcement 0,1,2,...) + faire des op sur la valeur (+,/,*,...) + trier le couple (indice,valeur) par rapport aux valeurs
J'ai pense a map (ou multimap) mais il semble que le tri ne puisse se faire que sur la 'key' et qu'on ne puisse pas demander facilement des op sur la Data (avec les algo de la stl)
Exact, et en lus le tri est fait automatiquement à chaque modification du contenu : tu n'as pas à le demander.
Existe-t-il un tel composant dans la stl ou faut-il que je cree une classe specifiquement pour cette usage ?
Un vector<pair<cle, valeur> > (ou une list ou une dequeu à la place du vector) peut-être?
Je vais essayer mais le tri d'une pair<cle, valeur> parsort se fait-il sur la cle ou la valeur ?? Dans mon cas, il faut imperativement que ce tri se fasse sur la valeur !!
Merci
Vince
vincent daanen
Existe-t-il un tel composant dans la stl ou faut-il que je cree une classe specifiquement pour cette usage ?
Un vector<pair<cle, valeur> > (ou une list ou une dequeu à la place du vector) peut-être?
Je vais essayer mais le tri d'une pair<cle, valeur> parsort se fait-il sur la cle ou la valeur ?? Dans mon cas, il faut imperativement que ce tri se fasse sur la valeur !!
Une fois n'est pas coutune, je me reponds a moi-meme ! En prenant comme cle ma valeur double (et donc comme data la valeur int), le tri se fait sur la valeur double !!
Ce n'est sans doute pas conseille d'agir comme ca mais ca marche ! Si quelqu'un a une solution pour que "sort" trie un vector<pair<int, double>> par rapport a la valeur double ,je suis preneur !!
Vince
Existe-t-il un tel composant dans la stl ou faut-il que je cree une
classe specifiquement pour cette usage ?
Un vector<pair<cle, valeur> > (ou une list ou une dequeu à la place du
vector) peut-être?
Je vais essayer mais le tri d'une pair<cle, valeur> parsort se fait-il
sur la cle ou la valeur ??
Dans mon cas, il faut imperativement que ce tri se fasse sur la valeur !!
Une fois n'est pas coutune, je me reponds a moi-meme !
En prenant comme cle ma valeur double (et donc comme data la valeur
int), le tri se fait sur la valeur double !!
Ce n'est sans doute pas conseille d'agir comme ca mais ca marche ! Si
quelqu'un a une solution pour que "sort" trie un vector<pair<int,
double>> par rapport a la valeur double ,je suis preneur !!
Existe-t-il un tel composant dans la stl ou faut-il que je cree une classe specifiquement pour cette usage ?
Un vector<pair<cle, valeur> > (ou une list ou une dequeu à la place du vector) peut-être?
Je vais essayer mais le tri d'une pair<cle, valeur> parsort se fait-il sur la cle ou la valeur ?? Dans mon cas, il faut imperativement que ce tri se fasse sur la valeur !!
Une fois n'est pas coutune, je me reponds a moi-meme ! En prenant comme cle ma valeur double (et donc comme data la valeur int), le tri se fait sur la valeur double !!
Ce n'est sans doute pas conseille d'agir comme ca mais ca marche ! Si quelqu'un a une solution pour que "sort" trie un vector<pair<int, double>> par rapport a la valeur double ,je suis preneur !!
Vince
Falk Tannhäuser
vincent daanen wrote:
Je vais essayer mais le tri d'une pair<cle, valeur> parsort se fait-il sur la cle ou la valeur ?? Dans mon cas, il faut imperativement que ce tri se fasse sur la valeur !!
Une fois n'est pas coutune, je me reponds a moi-meme ! En prenant comme cle ma valeur double (et donc comme data la valeur int), le tri se fait sur la valeur double !! Le problème potentiel avec un 'std::map<double, int>', c'est que le
résultat des comparaisons des valeurs 'double' dépend de la précision de la machine cible, et par conséquent il peut être difficile de prévoir si deux clés sont considérées égales ou non :
std::map<double, int> m; m[0.99999999999999999] = 37; m[1.0] = 42; assert(m.size() == 2); // Passe sur certaines machines, casse sur d'autres
À toi de voir si c'est gênant en pratique ou non.
Ce n'est sans doute pas conseille d'agir comme ca mais ca marche ! Si quelqu'un a une solution pour que "sort" trie un vector<pair<int, double>> par rapport a la valeur double ,je suis preneur !! Définir un functeur de comparaison, le passer comme argument au 'sort' :
Dernière remarque : À la place de 'std::pair', je préférerais probablement utiliser une 'struct' avec des noms de champs plus parlants que 'first' et 'second' ...
Falk
vincent daanen wrote:
Je vais essayer mais le tri d'une pair<cle, valeur> parsort se fait-il
sur la cle ou la valeur ??
Dans mon cas, il faut imperativement que ce tri se fasse sur la valeur !!
Une fois n'est pas coutune, je me reponds a moi-meme !
En prenant comme cle ma valeur double (et donc comme data la valeur
int), le tri se fait sur la valeur double !!
Le problème potentiel avec un 'std::map<double, int>', c'est que le
résultat des comparaisons des valeurs 'double' dépend de la précision
de la machine cible, et par conséquent il peut être difficile de prévoir
si deux clés sont considérées égales ou non :
std::map<double, int> m;
m[0.99999999999999999] = 37;
m[1.0] = 42;
assert(m.size() == 2); // Passe sur certaines machines, casse sur d'autres
À toi de voir si c'est gênant en pratique ou non.
Ce n'est sans doute pas conseille d'agir comme ca mais ca marche ! Si
quelqu'un a une solution pour que "sort" trie un vector<pair<int,
double>> par rapport a la valeur double ,je suis preneur !!
Définir un functeur de comparaison, le passer comme argument au 'sort' :
Dernière remarque : À la place de 'std::pair', je préférerais probablement
utiliser une 'struct' avec des noms de champs plus parlants que 'first' et
'second' ...
Je vais essayer mais le tri d'une pair<cle, valeur> parsort se fait-il sur la cle ou la valeur ?? Dans mon cas, il faut imperativement que ce tri se fasse sur la valeur !!
Une fois n'est pas coutune, je me reponds a moi-meme ! En prenant comme cle ma valeur double (et donc comme data la valeur int), le tri se fait sur la valeur double !! Le problème potentiel avec un 'std::map<double, int>', c'est que le
résultat des comparaisons des valeurs 'double' dépend de la précision de la machine cible, et par conséquent il peut être difficile de prévoir si deux clés sont considérées égales ou non :
std::map<double, int> m; m[0.99999999999999999] = 37; m[1.0] = 42; assert(m.size() == 2); // Passe sur certaines machines, casse sur d'autres
À toi de voir si c'est gênant en pratique ou non.
Ce n'est sans doute pas conseille d'agir comme ca mais ca marche ! Si quelqu'un a une solution pour que "sort" trie un vector<pair<int, double>> par rapport a la valeur double ,je suis preneur !! Définir un functeur de comparaison, le passer comme argument au 'sort' :
Dernière remarque : À la place de 'std::pair', je préférerais probablement utiliser une 'struct' avec des noms de champs plus parlants que 'first' et 'second' ...
Falk
Falk Tannhäuser
Falk Tannhäuser wrote:
Définir un functeur de comparaison, le passer comme argument au 'sort' :
template<typename T1, typename T2> struct Compare_second { bool operator()(std::pair<T1, T2> const& a, std::pair<T1, T2> const& b) { return a.second < b.second; } }; // struct Compare_second ... std::vector<std::pair<int, double> > v; std::sort(v.begin(), v.end(), Compare_second<int, double>()); Plus simple à l'utilisation :
Une fois n'est pas coutune, je me reponds a moi-meme ! En prenant comme cle ma valeur double (et donc comme data la valeur int), le tri se fait sur la valeur double !! Pourquoi ne pas deriver une classe de pair, ou tu surcharges l'operateur
inférieur ?
-- Anthony
vincent daanen wrote:
Une fois n'est pas coutune, je me reponds a moi-meme !
En prenant comme cle ma valeur double (et donc comme data la valeur
int), le tri se fait sur la valeur double !!
Pourquoi ne pas deriver une classe de pair, ou tu surcharges l'operateur
Une fois n'est pas coutune, je me reponds a moi-meme ! En prenant comme cle ma valeur double (et donc comme data la valeur int), le tri se fait sur la valeur double !! Pourquoi ne pas deriver une classe de pair, ou tu surcharges l'operateur
inférieur ?
-- Anthony
Fabien LE LEZ
On Thu, 05 Feb 2004 16:02:15 +0100, vincent daanen wrote:
En prenant comme cle ma valeur double (et donc comme data la valeur int), le tri se fait sur la valeur double
Sauf que dans ce cas, des opérations sur les double seront très compliquées à mettre en place, puisque tu ne peux pas modifier directement la valeur d'une clef dans un map<>. Il faut enlever la clef (et la valeur qui va avec) du map<>, modifier le "double", et réinsérer la clef+la valeur.
-- ;-)
On Thu, 05 Feb 2004 16:02:15 +0100, vincent daanen
<vdaanen_NO_SPAM@yahoo.fr> wrote:
En prenant comme cle ma valeur double (et donc comme data la valeur
int), le tri se fait sur la valeur double
Sauf que dans ce cas, des opérations sur les double seront très
compliquées à mettre en place, puisque tu ne peux pas modifier
directement la valeur d'une clef dans un map<>. Il faut enlever la
clef (et la valeur qui va avec) du map<>, modifier le "double", et
réinsérer la clef+la valeur.
On Thu, 05 Feb 2004 16:02:15 +0100, vincent daanen wrote:
En prenant comme cle ma valeur double (et donc comme data la valeur int), le tri se fait sur la valeur double
Sauf que dans ce cas, des opérations sur les double seront très compliquées à mettre en place, puisque tu ne peux pas modifier directement la valeur d'une clef dans un map<>. Il faut enlever la clef (et la valeur qui va avec) du map<>, modifier le "double", et réinsérer la clef+la valeur.