C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Quel composant stl utiliser ??

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
vincent daanen
Guest





PostPosted: Thu Feb 05, 2004 7:25 am    Post subject: Quel composant stl utiliser ?? Reply with quote



Bonjour a tous

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 ?

Merci

Vince

Back to top
Arnaud Debaene
Guest





PostPosted: Thu Feb 05, 2004 1:50 pm    Post subject: Re: Quel composant stl utiliser ?? Reply with quote



vincent daanen <vdaanen_NO_SPAM (AT) yahoo (DOT) fr> wrote

Quote:
Bonjour a tous
Bonjour.


Quote:
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.

Quote:
Existe-t-il un tel composant dans la stl ou faut-il que je cree une
classe specifiquement pour cette usage ?
Un vector<pair (ou une list ou une dequeu à la place du

vector) peut-être?

Arnaud

Back to top
vincent daanen
Guest





PostPosted: Thu Feb 05, 2004 2:34 pm    Post subject: Re: Quel composant stl utiliser ?? Reply with quote



Arnaud Debaene a écrit :
Quote:
vincent daanen <vdaanen_NO_SPAM (AT) yahoo (DOT) fr> wrote


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 (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


Back to top
vincent daanen
Guest





PostPosted: Thu Feb 05, 2004 3:02 pm    Post subject: Re: Quel composant stl utiliser ?? Reply with quote

vincent daanen a écrit :
Quote:
Existe-t-il un tel composant dans la stl ou faut-il que je cree une
classe specifiquement pour cette usage ?


Un vector<pair (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 double>> par rapport a la valeur double ,je suis preneur !!

Vince


Back to top
Falk Tannhäuser
Guest





PostPosted: Thu Feb 05, 2004 5:04 pm    Post subject: Re: Quel composant stl utiliser ?? Reply with quote

vincent daanen wrote:
Quote:
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.

Quote:

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 double>> par rapport a la valeur double ,je suis preneur !!
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 v;
std::sort(v.begin(), v.end(), Compare_second<int, double>());

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

Back to top
Falk Tannhäuser
Guest





PostPosted: Thu Feb 05, 2004 7:07 pm    Post subject: Re: Quel composant stl utiliser ?? Reply with quote

Falk Tannhäuser wrote:
Quote:
Définir un functeur de comparaison, le passer comme argument au 'sort' :

template<typename T1, typename T2
struct Compare_second
{
bool operator()(std::pair { return a.second < b.second; }
}; // struct Compare_second
...
std::vector v;
std::sort(v.begin(), v.end(), Compare_second<int, double>());
Plus simple à l'utilisation :


struct Compare_second
{
template<typename T1, typename T2>
bool operator()(std::pair<T1, T2> const& a, std::pair<T1, T2> const& b) { return a.second < b.second; }
}; // struct Compare_second
....
std::sort(v.begin(), v.end(), Compare_second());

Falk

Back to top
Anthony Jaguenaud
Guest





PostPosted: Thu Feb 05, 2004 10:22 pm    Post subject: Re: Quel composant stl utiliser ?? Reply with quote

vincent daanen wrote:
Quote:
vincent daanen a écrit :

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

Back to top
Fabien LE LEZ
Guest





PostPosted: Fri Feb 06, 2004 2:27 am    Post subject: Re: Quel composant stl utiliser ?? Reply with quote

On Thu, 05 Feb 2004 16:02:15 +0100, vincent daanen
<vdaanen_NO_SPAM (AT) yahoo (DOT) fr> wrote:

Quote:
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.

--
;-)

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.