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
kanze
"Michel Michaud" wrote in message
news:<8cK8d.11528$...
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.


C'est le cas. Que tu le vois ou non. J'ai déjà eu des problèmes à porter
du code depuis Solaris à HP/UX. Heureusement, que dans les commentaires,
parce qu'il n'y avait pas d'accents ailleurs. Mais le fait est que c'est
problèmatique. Ça marche aussi longtemps que tu utilises qu'un seul
système, vendu et/ou configuré pour un seul locale. Dès que tu sors de
cette configuration, tu as des problèmes.

--
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
Arnaud Meurgues
wrote:

Si je régarde autour de moi ici, personne ne se sent obligé à lire
l'anglais pour rester à jour dans le domaine bancaire. Et si personne
n'aurait de problème pour trouver des symboles comme oldState ou
loopCount, même moi, j'aurais du mal à trouver de l'anglais qui
conviendrait à « affectation », « titre » ou « obligation » (dans leurs
signification boursière). Et c'est justement sur ces termes qu'un à peu
près peut préter à la plus de confusion.


Par ailleurs, je ne suis pas certain de comprendre les termes de finance
en français non plus. Alors l'apprendre en anglais ou en français, pour
moi, c'est kif-kif.

--
Arnaud
(Supprimez les geneurs pour me répondre)

Avatar
Arnaud Meurgues
wrote:

[*] Je précise que je préfère les 52 caractères de l'alphabet
utilisé en anglais, aux milliers de kanjis du chinois. Ben oui, si
on laisse tomber l'anglais, la langue "forte" risque fort d'être le
chinois, vu la population chinoise...
Rassures-toi, l'indi est une langue alphabétique, et non

idéogramatique. ;-)
Mais il a parlé du chinois.



Oui. Ce que je sous-entendais, c'était que l'Inde était sur le point de
rattraper, voire de dépasser la Chine en terme de population.

En ce concerne l'informatique, la langue usuelle en Inde est l'anglais,
non l'hindi. (Le centre principal de l'informatique en Inde est
Bangalore. Où on parle le Kannada, et non l'Hindi.)


Oups. Dont acte.

--
Arnaud
(Supprimez les geneurs pour me répondre)



Avatar
Arnaud Meurgues
wrote:

Ben si. Actuellement, à ce que je sache, la norme C++ ne fournit aucun
moyen de connaître le jeu de caractères utilisé par un fichier.
Et pour cause. La plupart des systèmes ne fournit aucun moyen de le

connaître. Alors, si le C++ l'imposait, comment est-ce que tu ferais
pour l'implémenter.


XML demande de le faire figurer dans l'entête. C++ pourrait demander la
même chose (au moins si l'on choisit autre chose que le mode par défaut).

Par ailleurs, tu dis que la norme impose de pouvoir écrire du code
avec les caractères que l'on veut. Je n'ai pas trouvé où elle
spécifiait ça. C'est où ?
La norme impose qu'une implémentation comprenne tous les caractères de

base. Elle impose aussi qu'elle comprenne des « universal character
names ». Elle laisse l'implémentation libre de traduire les fichiers en
entrée comme elle veut.


Nous sommes bien d'accord, alors. Rien dans la norme d'oblige à accepter

ChercherValeur(int p_valeurCherchée)
: m_valeurCherchée(p_valeurCherchée)
{}


--
Arnaud
(Supprimez les geneurs pour me répondre)


Avatar
Andre Heinen
On Thu, 7 Oct 2004 00:38:26 -0400, "Michel Michaud"
wrote:

Dans le message ,

- "été" n'est pas bon car il posera des problèmes de portabilité,


Je ne sais pas si c'est pire que les autres problèmes du genre,
comme ASCII vs EBCDIC...


En tout cas, ça fait toujours un problème de moins.

- "u00E9tu00E9" n'est pas bon car illisible.


En principe, l'outil de développement devrait les cacher et
montrer été...


En principe... :-)

Si quelqu'un me demande comment écrire des identificateurs en
C++, je lui déconseillerai d'utiliser des caractères qui ne font
pas partie de l'ASCII 7 bits.


Et pour les commentaires, quel différence ?


Pour les commentaires, je ne sais pas trop. Mon compilateur
accepte les accents dans les commentaires, mais pas dans les
identificateurs. J'imagine que ça doit être le cas de beaucoup
de compilos, puisque les commentaires sont simplement ignorés...

Donc il me semble que dans les commentaires les accents posent
moins de problèmes. Bien sûr, si on passe sur une machine qui
utilise un autre jeu de caractères, les commentaires seront moins
lisibles, mais au moins le programme compilera...

Ceci étant dit, s'il est clair dès le départ qu'il va y avoir un
problème de cet ordre, on doit naturellement écrire les
commentaires sans accents. A voir au cas par cas, AMHA.

--
Andre Heinen
My address, rot13-encoded: n qbg urvara ng rhebcrnayvax qbg pbz


Avatar
Jean-Marc Bourguet
Andre Heinen writes:

Bien sûr, si on passe sur une machine qui utilise un autre jeu de
caractères,


A partir du moment ou on considere qu'une machine utilise un seul jeu
de caractere, on est sur de trop simplifier le probleme.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Fabien LE LEZ
On 7 Oct 2004 01:26:07 -0700, :

Tu vis trop dans le monde fermé de Windows.


Dans un sous-ensemble du monde fermé de Windows.
Dès qu'on ouvre un shell (i.e. une fenêtre "ligne de commande"), on
est confronté à un jeu de caractères différents. J'aimerais pas devoir
appeler grep avec des accents dans ces conditions.


--
;-)

Avatar
Fabien LE LEZ
On Thu, 07 Oct 2004 13:09:44 +0200, Arnaud Meurgues
:

Oui. Ce que je sous-entendais, c'était que l'Inde était sur le point de
rattraper, voire de dépasser la Chine en terme de population.


Heureusement que le Commonwealth est passé par là ! ;-)


--
;-)

Avatar
Fabien LE LEZ
On Wed, 6 Oct 2004 23:58:20 -0400, "Michel Michaud" :

Je crois que le raisonnement est à l'envers. Si je veux compiler
un code avec un certain compilateur, je lui donne le code dans le
jeu de caractères qu'il connaît.


Du coup, tu n'as pas besoin que le compilo comprenne les caractères
non-ASCII, il suffit de modifier ton code en entrée. Par exemple :

a-zA-Z restent tels quels
_ devient _005F
é devient _00E9
à devient _00E0
rho minuscule devient _03C1

Et zou, tu tapes les caractères que tu veux, tu passes la moulinette,
et le compilo n'y voit que du feu. Reste à passer les messages
d'erreurs à la moulinette inverse, et le tour est joué.


--
;-)

Avatar
Fabien LE LEZ
On Thu, 07 Oct 2004 13:44:41 +0200, Andre Heinen
:

on doit naturellement écrire les commentaires sans accents.


Suffit de les écrire en anglais ;-)


--
;-)