OVH Cloud OVH Cloud

recherche d'un element suivant la valeur d'un des champs

184 réponses
Avatar
Alain Cabiran
Bonjour,

j'ai cherché, testé, retesté, essayé, réessayé et n'ai pas trouvé
de solution à ce problème

assume using namespace std :-)

imaginons avoir :

class objet
{
public:
objet(int valeur) : monchamps(valeur) { } ;
int getChamps() const { return monchamp; } ;
private:
int monchamps();
};

un conteneur : list<objet> liste;
son iterateur : list<objet>::iterator it;

une valeur prédéfinie : int valeur = 5;

est-ce qu'il est possible, en utilisant les adaptateurs stl,
d'avoir l'équivalent de :

cherche dans liste le premier élément avec la condition
it->monchamp == valeur ?

j'ai commencé par :

it = find_if(liste.begin(), liste.end(), TOTO);

ensuite j'ai cherché TOTO : bind2nd(equal_to<int>(), valeur)

et là ... je sais pas, j'ai essayé de placer :

mem_fun_ref(&objet::getChamps) mais je n'ai pas trouvé où le mettre
et même si je peux seulement l'y mettre.

quelqu'un a une idée ?

Alain Cabiran

ps: il manque évidemment le constructeur de copie, les operateurs de
comparaisons, ... dans la classe, c'est juste pour faire plus court.

4 réponses

Avatar
Michel Michaud
Dans le message ,
"Michel Michaud" wrote in message
news:<4e39d.20123$...
Dans le message ,
En passant, il y a une chose que je n'arrive pas à comprendre.
Depuis plus de vingt ans que je lis des livres techniques, le
meilleur écrit, c-à-d celui dont l'anglais était le mieux, c'est
bien le Josuttis et Vandevoort. Or, ni l'un ni l'autre des auteurs
n'est anglophone d'origine. Je n'arrive pas à comprendre comment
ils l'ont fait.


L'étape nécessaire s'appelle révision linguistique. Ça coûte cher,
alors seulement les livres qui ont un bon potentiel de vente
peuvent se le permettre. Rien de mystérieux :-)


Il y a plus que ça. Tu pourrais passer quelque chose que j'aurais
écrit par autant de révisions linguistiques que tu veux, il ne
serait jamais aussi bon que ce qu'ils ont écrit. La révision
linguistique peut ratrapper des erreurs gramatiques et des choses
semblables, mais il ne peut pas ajouter des détails qui manquent,
ni en enlever quand il y en a de trop. Il ne peut pas changer
l'ordre ni l'organisation de la présentation. Il ne peut pas
ajouter des exemples où il en manque.


Mais ça, les auteurs peuvent le faire dans leur langue ou dans une
approximation de l'anglais. J'ai l'impression que tu as perdu le
fil : tu te demandais comment leur anglais était si bon et ma réponse
reste fort probablement la bonne. La qualité des exemples, de la
présentation, etc., n'a rien à voir avec la langue...

La révision linguistique peut rendre acceptable quelque chose qui
était mauvaise. Elle ne peut pas rendre excellent quelque chose qui
n'était que bon au départ.


Si on parle de la langue, ça peut rendre excellent ce qui était même
minable. Il faut que les auteurs sachent écrire un bon livre au point
de vue pédagogique et technique, mais c'est tout à fait indépendant
dans leur langue maternelle...

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/



Avatar
drkm
"Michel Michaud" writes:

Mais apparamment, mes éditeurs ne sont pas à jour. Parce qu'il ne
reconnaissent pas les uxxxx.


Je suppose que pour un spécialiste de Emacs, ce sera un jeu d'enfant
d'arranger ça. Sinon on devra dire mauvais outil, changer d'outil...


Je confirme. Personnellement, j'aurais utilisé
`write-region-annotate-functions' et `after-insert-file-functions'.
Mais Pascal Bourguignon a renseigné ceci il y a peu, que je trouve
finalement plus adapté :

Message-ID:

Ce qui donnerait quelque chose comme :

(font-lock-add-keywords
'c++-mode
'(("\u([[:xdigit:]]{4})"
(0 (let ((code (string-to-number (match-string 1) 16)))
(when (> code 255)
(error "FIXME: Support only Latin 1 codes."))
(compose-region (match-beginning 0)
(match-end 0)
(make-char 'latin-iso8859-1 code)
'decompose-region)
nil)))))

Avec de la substitution à la saisie, pour que lorsque je saisi "é",
c'est en fait le bon code "uXXXX" qui est en fait inséré dans le
buffer, mais que ces codes apparaissent substitués.

Je ne pense pas que CC Mode, le mode d'édition des langages dérivés
du C (et C lui-même) pour Emacs, prenne en charge ce genre de choses.
Tu peux leur proposer :-)

--drkm


Avatar
kanze
"Michel Michaud" wrote in message
news:<vaCad.16639$...
Dans le message ,
"Michel Michaud" wrote in message
news:<NLb9d.31747$...
En fait, les outils de développement pourraient faire ça pour toi.


Je crois que c'était un peu l'intention. Toi, tu écris été, mais ce
qui se trouvait dans le fichier était u00E9tu00E9. Et évidemment,
quand le fichier contenait u00E9tu00E9, l'éditeur affichait été.

Mais apparamment, mes éditeurs ne sont pas à jour. Parce qu'il ne
reconnaissent pas les uxxxx.


Je suppose que pour un spécialiste de Emacs, ce sera un jeu d'enfant
d'arranger ça. Sinon on devra dire mauvais outil, changer d'outil...


Je le suppose. Je ne connais pas assez bien emacs pour dire.

Mon éditeur (vim) a la possibilité de passer un ficher par un filtre
lorsqu'on le lit ou qu'on l'écrit. Ça me semble une bonne solution --
c'est le filtre qui ferait le transcodage. Mais je n'ai pas encore écrit
le filtre nécessaire. Et je ne m'y précipitrais pas, non plus, dans la
mésure que mes compilateurs ne sont pas à jour non plus.

Ceci dit, je ne suis pas sûr que c'est la solution non plus. Dans la
pratique, on régarde le fichier avec pas mal d'outils, outre l'éditeur.
Alors, il faudrait prévoir le filtre pour grep et al. aussi.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
kanze
"Michel Michaud" wrote in message
news:<ceCad.16695$...
Dans le message ,
"Michel Michaud" wrote in message
news:<4e39d.20123$...
Dans le message ,
En passant, il y a une chose que je n'arrive pas à comprendre.
Depuis plus de vingt ans que je lis des livres techniques, le
meilleur écrit, c-à-d celui dont l'anglais était le mieux, c'est
bien le Josuttis et Vandevoort. Or, ni l'un ni l'autre des auteurs
n'est anglophone d'origine. Je n'arrive pas à comprendre comment
ils l'ont fait.


L'étape nécessaire s'appelle révision linguistique. Ça coûte cher,
alors seulement les livres qui ont un bon potentiel de vente
peuvent se le permettre. Rien de mystérieux :-)


Il y a plus que ça. Tu pourrais passer quelque chose que j'aurais
écrit par autant de révisions linguistiques que tu veux, il ne
serait jamais aussi bon que ce qu'ils ont écrit. La révision
linguistique peut ratrapper des erreurs gramatiques et des choses
semblables, mais il ne peut pas ajouter des détails qui manquent, ni
en enlever quand il y en a de trop. Il ne peut pas changer l'ordre
ni l'organisation de la présentation. Il ne peut pas ajouter des
exemples où il en manque.


Mais ça, les auteurs peuvent le faire dans leur langue ou dans une
approximation de l'anglais.


Là aussi, ce n'est qu'en partie vrai. Les auteurs peuvent bien concevoir
l'organisation et la présentation dans leur propre langue. Mais pour
qu'elles en ressortent à la fin, il faut qu'ils les expriment
correctement aussi.

C'est un peu comme pour un programme. Tu peux avoir une belle
conception et tout ce que tu veux, à la fin, il faut l'exprimer en
langage de programmation. Et si tu essaies de le faire en C++, sans bien
connaître le C++, la beauté de ta conception va se perdre, et même un
expert C++ qui vient après faire le menage ne va pas réussir à la
rétrouver.

J'ai l'impression que tu as perdu le fil : tu te demandais comment
leur anglais était si bon et ma réponse reste fort probablement la
bonne. La qualité des exemples, de la présentation, etc., n'a rien à
voir avec la langue...


En partie si. La valeur d'un exemple, par exemple, c'est dans les
explinations qui l'accompagne. Or, si c'est explinations ne sont pas
compréhensibles, il devient impossible à extraire l'information que tu
as voulu y mettre. L'information est perdu -- même pour le réviseur
linguistique, qui ne peut pas ajouter quelque chose qu'il n'y trouve
pas.

La révision linguistique peut rendre acceptable quelque chose qui
était mauvaise. Elle ne peut pas rendre excellent quelque chose qui
n'était que bon au départ.


Si on parle de la langue, ça peut rendre excellent ce qui était même
minable. Il faut que les auteurs sachent écrire un bon livre au point
de vue pédagogique et technique, mais c'est tout à fait indépendant
dans leur langue maternelle...


Là, je ne suis pas du tout d'accord. C'est en plus de leur langue
maternelle, mais ce n'en est pas indépendant.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34