Mon objectif est d'utiliser les map avec comme clé un tableau IVec3D défini comme suit :
Je voudrais connaitre les étapes à suivreCode:
1
2 inline IVec3D(int x, int y, int z) { coord[0] = x; coord[1] = y; coord[2] = z; };
Merci d'avance
Version imprimable
Mon objectif est d'utiliser les map avec comme clé un tableau IVec3D défini comme suit :
Je voudrais connaitre les étapes à suivreCode:
1
2 inline IVec3D(int x, int y, int z) { coord[0] = x; coord[1] = y; coord[2] = z; };
Merci d'avance
Salut,
Il me semble que ta question est incomplète.
une std::map<Key,Value> est un conteneur associatif qui relie une clé (de type Key) à une valeur (de type Value). Key doit suivre un ordre strict (cf Comment surcharger correctement l'opérateur < ?) soit parce qu'elle supporte un opérateur '<', soit parce que la map est construite avec un foncteur de comparaison dédié.
Peux tu expliquer plus précisément ton problème ?
Un comparateur est juste un foncteur qui prend 2 clés en arguments et retourne vrai ou faux selon le résultat de la comparaison :
Ensuite tu dois définir un ordre strict sur des clés. Tu peux t'inspirer de ce qu'il y a dans la F.A.Q : Comment surcharger correctement l'opérateur < ?. Ce pourrait être quelque chose comme ça (attention, c'est un exemple et peut être pas l'ordre le plus pertinent pour ton problème) :Code:
1
2
3
4
5
6
7 struct comp_key { bool operator()(key const&lhs_, key const&rhs_); }; std::map<key,value,comp_key> my_map(/*comp_key()*/);
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #include <iostream> #include <map> struct IVec3D { int x,y,z; struct comp { bool operator()(IVec3D const &lhs_, IVec3D const &rhs_) { if(lhs_.x<rhs_.x){ return true; } else if(rhs_.x<lhs_.x) { return false; } else{ if(lhs_.y<rhs_.y){ return true; } else if(rhs_.y<lhs_.y){ return false; } else{ return lhs_.z<rhs_.z; } } } }; }; int main() { std::map<IVec3D,int,IVec3D::comp> mon_map; return 0; }