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.

10 réponses

Avatar
Fabien LE LEZ
On Tue, 5 Oct 2004 22:44:41 -0400, "Michel Michaud" :

Pour un compilateur sur une plate-forme donnée, ce
problème n'existe pas.


Sauf qu'il faut tout de même un tant soit peu de standardisation. Si
un code qui fonctionne sur un poste ne fonctionne plus sur le poste
d'à côté, avec le même compilo mais Windows en espagnol ou en grec, ça
n'est pas acceptable. De même, si je ne peux plus compiler du code
sous prétexte que l'auteur l'a tapé sous Linux, ça n'est pas plus
acceptable.
Si je me souviens bien, la standardisation proposée met les caractères
sur plus de 8 bits. Et ça ne m'étonnerait pas que la plupart des
compilos soient programmés sur la base 1 caractère = 8 bits.

D'autre part, si mettre des accents réduit le nombre d'éditeurs
capables de lire le code, c'est pas forcément génial non plus.

--
;-)

Avatar
Fabien LE LEZ
On 05 Oct 2004 22:24:40 -0500, Gabriel Dos Reis :

j'ai l'entendu à la télé jeudi dernier ;-p


Quelqu'un pourrait-il prendre en pitié un pov' gars qui n'a plus la
télé depuis 9 ans et ne comprend donc pas de quoi il en retourne ?

--
;-)

Avatar
Michel Michaud
Dans le message ,
On Tue, 5 Oct 2004 22:24:23 -0400, "Michel Michaud" :

Je ne sais pas pourquoi Usenet-fr rend les choses compliquées,
mais je sais que le code de caractères utilisé dans Windows (par
exemple) est bien défini. Celui de Linux aussi. (etc.)


Ben l'explication est simple : un message posté sur Usenet-fr doit
être lisible par des utilisateurs de Windows, de Linux, de MacOS,
etc. De même qu'un code C++ écrit sous Windows doit être lisible
sous Linux (sinon, autant programmer en VB).


Ça semble facile et maîtrisé par les outils actuels. Ce n'est
pas là qu'il y a complexité...

Lire est une chose. Écrire et parler est très différent.


La prononciation anglaise est effectivement très différente de ce
qu'on a en français.
Par contre, quelqu'un qui a lu beaucoup d'anglais et fait un peu
d'efforts arrive assez rapidement à écrire.


Écrire, certes. Bien écrire, c'est très différent.

[...]
Traduire les identificateurs aussi, s'ils sont bien clairs et/ou
bien commentés :-)


Qu'est-ce que ça donne quand on traduit un bouquin ?


Les traducteurs de livres informatiques sont rarement capables de
comprendre le code suffisamment pour le récrire en français
correctement...

Je crois qu'il vaut mieux tout traduire si c'est possible pour
s'assurer que le lecteur comprendra le mieux possible (après tout,
il n'a pas acheté la version française pour rien...).

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


Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| On 05 Oct 2004 22:24:40 -0500, Gabriel Dos Reis :
|
| >j'ai l'entendu à la télé jeudi dernier ;-p
|
| Quelqu'un pourrait-il prendre en pitié un pov' gars qui n'a plus la
| télé depuis 9 ans et ne comprend donc pas de quoi il en retourne ?

Non pas que je regarde souvent la télé ici -- je pense que c'est pire
qu'en France et de plus je n'ai pas beaucoup de temps. Mais il se
passe des choses ici auxquelles on peut rester difficilement
indifférent.

Google avec « global test » -- le premier hit me fait déjà marrer :-)
(Limite la recherche à pas plus de 5 jours).

-- Gaby
Avatar
Michel Michaud
Dans le message ,
Google avec « global test » -- le premier hit me fait déjà marrer
:-) (Limite la recherche à pas plus de 5 jours).


Merci pour l'info. Mais ce n'est pas vraiment drôle :-)

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

Avatar
Michel Michaud
Dans le message ,
Pour reprendre un de tes arguments, peut-être faudrait-il que fclc++
disparaisse, pour forcer les programmeurs à poster en anglais sur
clc++m.


Ce serait plutôt un de tes arguments, non ?

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

Avatar
Michel Michaud
Dans le message ,
"Michel Michaud" writes:

Le problème de Usenet est l'encodage varié des caractères pour
transmission. Pour un compilateur sur une plate-forme donnée, ce
problème n'existe pas.


Tu ne compiles réellement jamais de code source écrit sur une autre
plate-forme ?


Oui, mais les outils permettant de transférer les fichiers n'ont
pas de problèmes avec mes accents...

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


Avatar
Michel Michaud
Dans le message ,
Sauf qu'il faut tout de même un tant soit peu de standardisation. Si
un code qui fonctionne sur un poste ne fonctionne plus sur le poste
d'à côté, avec le même compilo mais Windows en espagnol ou en grec,
ça n'est pas acceptable. De même, si je ne peux plus compiler du
code sous prétexte que l'auteur l'a tapé sous Linux, ça n'est pas
plus acceptable.


Mais je ne vois pas pourquoi ce serait le cas.

Si je me souviens bien, la standardisation proposée met les
caractères sur plus de 8 bits. Et ça ne m'étonnerait pas que la
plupart des compilos soient programmés sur la base 1 caractère = 8
bits.


Dans ce cas, les plate-formes auront aussi cette limitation ou
alors le compilateur est inutilisable, accents ou pas.

D'autre part, si mettre des accents réduit le nombre d'éditeurs
capables de lire le code, c'est pas forcément génial non plus.


Si l'éditeur ne comprend pas les accents alors que la plate-forme
les comprend, il faut éviter cet éditeur.

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

Avatar
Gabriel Dos Reis
Fabien LE LEZ writes:

| On 05 Oct 2004 22:24:40 -0500, Gabriel Dos Reis :
|
| >j'ai l'entendu à la télé jeudi dernier ;-p
|
| Quelqu'un pourrait-il prendre en pitié un pov' gars qui n'a plus la
| télé depuis 9 ans et ne comprend donc pas de quoi il en retourne ?


http://www.transterrestrial.com/scripts/globaltest/
http://www.cnn.com/2004/ALLPOLITICS/10/04/kerry.global/
http://www.slate.com/Default.aspx?id!07690&


namespace disclaimer {
Les idées exprimées sur ces pages ne sont pas miennes. Elles sont
celles de leurs auteurs.
}

-- Gaby
Avatar
kanze
"Michel Michaud" wrote in message
news:<_zo8d.7117$...
Dans le message ,
En regardant l'architecture du compilateur que je connais, je dirais
que cela me paraît plus facile d'implémenter la recherche de nom
dépendant des arguments que les accents. Mais, ça c'est moi.


J'aurais cru que c'était simplement au niveau du parser que ça faisait
une différence. Mais ça, c'est moi (et je ne suis pas du tout un
expert en compilation...) :-)


Il y a une différence entre la difficulté conceptuelle, et la difficulté
pratique de l'implémentation. Faire reconnaître des caractères de plus
par le lexeur, c'est un jeu d'enfant. Mais il ne faut pas oublir que par
la suite, ces caractères vont se rétrouver dans le tableau de symboles.
Un composant qui sert à peu près partout dans le compilateur. Et qu'ils
vont apparaître dans les messages d'erreur -- du coup, il faut se poser
la question comment les afficher.

Dans le cas de g++, il ne faut pas oublier non plus qu'il se base la
plupart du temps sur des outils (assembleur, éditeur de liens) du
système hôte. Alors, comment veux-tu que g++ supporte des accents dans
les noms si l'éditeur de liens ne les supporte pas.

Les autres ont certainement des perceptions différentes.


Je pensais que tes connaissances dans ce domaine suffiraient à faire
dépasser tes opinions de la simple perception. (je le pense encore et
je crois donc qu'il doit y avoir quelque chose de plus complexe que ce
que je perçois)

Ah, il ne faut pas croire que « l'internationalisation » n'est pas
importante pour les gens qui travaillent sur GCC. Je sais que Apple,
par exemple, est très sensible sur ce sujet et qu'ils y investissent
des efforts importants.


J'imagine que l'internationalisation est un domaine plus vaste que la
simple reconnaissance des 256 codes de caractères sur un octet qui me
permet d'écrire les identificateurs dans le code de caractères de base
sur bien des plate-formes...


Évidemment, s'il ne s'agit que de permettre les caractères alphabétiques
de ISO 8859-1... La norme en exige beaucoup plus.

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