C++ les Map problème avec le find( )
Larry
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je programme un petit jeu et pour ce faire j'ai besoin d'un Vector d'élément , pour optimiser la recherche dans le Vector j'utilise une Map.
Cette Map est constitué comme ceci : typedef std::map <Position, int > MAPMONDE;
int : est l'indice de l'élement dans le vector .
la Position est une classe contenant la coordonnée en X et en Y ( int , int ) sur la carte.
J'aimerai donc savoir si un élément existe déjà dans la même ( si la position n'est pas déjà prise dans la map).
Me faut-il réécrire les opérations sur la classe Position et si oui comment ?
Merci de vos réponses éclairées.
je programme un petit jeu et pour ce faire j'ai besoin d'un Vector d'élément , pour optimiser la recherche dans le Vector j'utilise une Map.
Cette Map est constitué comme ceci : typedef std::map <Position, int > MAPMONDE;
int : est l'indice de l'élement dans le vector .
la Position est une classe contenant la coordonnée en X et en Y ( int , int ) sur la carte.
J'aimerai donc savoir si un élément existe déjà dans la même ( si la position n'est pas déjà prise dans la map).
Me faut-il réécrire les opérations sur la classe Position et si oui comment ?
Merci de vos réponses éclairées.
Configuration: Windows Vista Firefox 2.0.0.17
4 réponses
-
Si tu fait une recherche sur la position, ça ne donne rien ?
Il faut peut être rdéfinir l'opérateur de comparaison ==. -
Je redéfinir l'opérateur == pour voir :
bool Position::operator==(const Position x, const Position y);
{
return (x.getX() == y.getX()) && (x.getY() == y.getY());
}
Le compilo me dit : " bool Position ::operator==(Position,Position) must take exactly one argument"
Il a craqué son slip ou quoi ^^ -
En fait le problème c'est de redéfinir le "less" car dans la map le clé doit pouvoir être ordonnée.
template <class _Tp>
struct less : public binary_function<_Tp, _Tp, bool>
{
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x < __y; }
}; -
tu peux redéfinir un operator< bidon, qui renvoi toujours 0 si les Position ne sont pas identique.
tu as les équivalences :
A>B <-> B<A
A==B <-> !A<B && !B<A
A!=B <-> A<B || B<A
etc.