Bonjour à tous,
Est ce possible de créer une mappe avec 2 clés ou plus ?
Merci d'avance
Version imprimable
Bonjour à tous,
Est ce possible de créer une mappe avec 2 clés ou plus ?
Merci d'avance
Bonjour,
C'est possible, mais pas avec la std::map. Il faut regarder du coté du boost::multi_index.
Salut,
En fait, c'est même un peu plus complexe que cela...
Avec la std::map, il est tout à fait possible de créer des clés composées, dans lesquelles il y aurait, par exemple une chaine et une valeur numérique qui interviennent pour trouver l'élément unique.
un code proche de
est par exemple tout à fait valide mais t'oblige à chercher l'objet dont la chaine de caractère est "vis_a_bois" et la valeur numérique est 3 par exemple.Code:std::map< std::pair<std::string, int>, LeTypeD'objet> lamap;
Si l'idée est de te permettre de trier les éléments selon différents critères, et d'avoir plusieurs clés "simples", il faut, effectivement, se tourner vers boost::multi_index ;)
Bref, dis nous ce qu'il te faut exactement, nous te dirons comment t'en passer :D
Ce que je veux exactement c'est une mappe avec un clé composé de 2 chaines de caractères et l'info à enregistrer est un objet
Tu ne veux donc pas un map avec 2 clefs, mais une map avec une clef, composée de deux parties.
Oui, c'est possible à faire. Il te suffit de mettre en place par exemple (d'autres écritures existent, plus ou moins simples/flexibles) :
Voir http://cpp.developpez.com/faq/cpp/?p...ator_inferieur pour plus d'infos.Code:
1
2
3
4
5
6
7
8
9
10
11
12 struct MaClefComposite { string chaine1; string chaine2; static bool operator<(MaClefComposite const &c1, MaClefComposite const &c2) { if (c1.chaine1 < c2.chaine1) return true; return c1.chaine2 < c2.chaine2; } };
Mais cela ne répond pas entièrement à la question...
Veux tu devoir passer les deux chaines de caractères pour retrouver un objet donné, ou veux tu pouvoir passer soit l'une soit l'autre uniquement, et retrouver l'objet en question :question:
Dans le premier cas, std::map fait l'affaire, dans le second, c'est boost::multi_index qu'il faut :P
ce que je veut c'est chercher une valeur à partir de deux clés (ensemble)
En quoi la réponse de Loic ne te conviens pas ?
Merci tous pour vos réponses,
j'ai opté pour la réponse de JolyLoic.