Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème de parcours de map

24 réponses
Avatar
MGN
Bonsoir,
J'ai des map du type
std::map<objet*,objet*,foncteur>
où le foncteur varie (le type des objets aussi, mais ça ne change rien à la
définition de la map).
Je cherche à parcourir (uniquement parcourir, pas modifier) une map de ce
type sans connaître le foncteur qui a été utilisé pour le tri, ie quelque
chose du type :

std::map<objet*,objet*,foncteur> x;
std::map<objet*,objet*>::iterator it;
for(it=x.begin();it!=x.end();++it) {}

Evidement, cette syntaxe ne marche pas. Quelqu'un sait comment faire ?
Merci à vous
Marc

4 réponses

1 2 3
Avatar
Michael Doubez
On 11 sep, 10:11, "MGN" wrote:
oui, j'avais compris en fait.
Mon problème vient plutôt d'un message d'erreur du compilateur lorsqu e la
fonction de tri est une fonction template.

template<typename T> bool f(int u,int v) { return u<v; }
typedef std::map<int,int,bool(*)(int,int)> Map;

si j'écris par exemple
Map x(f<bool>);



Et
Map x(&f<bool>);
?

mon compilateur refuse



Avec quel message d'erreur ?

--
Michael
Avatar
MGN
La même erreur dans les deux cas :
=> Impossible de trouver une correspondance pour 'Map::map(bool
(*)(int,int))'
C'est un bug de mon compilateur BCB 2007, il faut croire.
Marc
Avatar
Michael Doubez
On 11 sep, 15:20, "MGN" wrote:
La même erreur dans les deux cas :
=> Impossible de trouver une correspondance pour 'Map::map(bool
(*)(int,int))'
C'est un bug de mon compilateur BCB 2007,  il faut croire.
Marc



C'est plus qu'un bug si c'est bien le cas.
Le §23.3.1.1 du standard précise.
explicit map ( const Compare& comp = Compare(),
const Allocator& = Allocator() );

C'est le constructeur utilisé pour la construction par défaut. Dur de
le manquer.

--
Michael
Avatar
James Kanze
On Sep 11, 4:31 pm, Michael Doubez wrote:
On 11 sep, 15:20, "MGN" wrote:



> La même erreur dans les deux cas :
> => Impossible de trouver une correspondance pour 'Map::map(bool
> (*)(int,int))'
> C'est un bug de mon compilateur BCB 2007, il faut croire.



C'est plus qu'un bug si c'est bien le cas.
Le §23.3.1.1 du standard précise.
explicit map ( const Compare& comp = Compare(),
const Allocator& = Allocator() );



C'est le constructeur utilisé pour la construction par défaut.
Dur de le manquer.



Oui, mais une erreur dans le compilateur pourrait bien faire que
le compilateur ne le trouve pas pendant la résolution des
surcharges, même s'il existe. (Si je me rappelle correctement,
MGN avait dit que ça marchait quand la fonction en question
n'était pas un template, ou quand le pointeur à la fonction
était une variable locale, et non le nom de la fonction
directement, ce qui indiquerait que le constructeur existe.)

À mon avis, la seule chose qu'il lui reste à faire, c'est de
changer le compilateur, s'il peut. S'il n'y a pas d'autres
contraints, VC++ sous Windows, et g++ sous Unix, sont gratuits,
et tous les deux sont de très bons compilateurs pour ces
plateformes.

--
James Kanze
1 2 3