J'ai besoin d'avoir une clé avec plusieurs valeurs. Ce discbased recommanderiez-vous?
J'ai un tableau de chaînes rempli avec les mots d'une phrase.
words[0] = "the"
words[1] = "dog"
words[2] = "jumped"
words[3] = "over"
words[4] = "the"
words[5] = "wall."
words[6] = "the"
words[7] = "cat"
words[8] = "fell"
words[9] = "off"
words[10] = "the"
words[10] = "house."
etc.
(Exemple stupide, mais il travaille pour cela)
Chaque mot sera l'un des grands avec son mot suivant comme il est de valeur. donc "plus" => "les". Certaines touches peuvent avoir plusieurs valeurs. Par exemple, "le" => "chien" || "mur" || "chat" || "maison". La valeur est choisie au hasard de ceux pour qui la clé.
Lorsque le programme s'exécute, il choisit un mot au hasard et en fait une phrase. Ainsi, il pourrait être quelque chose comme: "le chat est tombé du chien".
J'ai essayé la mise en œuvre d'une carte (carte myMap;) mais cela permet qu'une seule valeur par clé (je pense).
Espère que j'ai expliqué ce droit.
Vous devez vous connecter pour publier un commentaire.
vous pouvez utiliser une multimap de la STL et l'utilisation de l'appel
pour obtenir une gamme de itérateurs qui correspondent à vos clés
personnellement, je trouve un peu maladroit en raison d'avoir à traiter avec un itérateur plages plutôt que de récupérer un objet qui représente toutes les valeurs de cette clé. pour obtenir autour de ce que vous pourrait également stocker un vecteur dans une carte régulièrement et ajouter vos chaînes sont le vecteur.
std::multimap
Le lien fournit un excellent exemple. Cité ci-dessous:
Si vous êtes à l'aide de C++ puis il suffit de créer une classe pour représenter vos paires clé-valeur:
Ensuite, créez une carte que les cartes de chaque touche à un objet contenant ses valeurs.
C'est simple, extensible et peut être fait dans n'importe quelle OO-langue.
Désolé, mon C++ est rouillé, donc la syntaxe est mauvaise, mais l'idée essentielle est simple.
Vous pouvez également utiliser unordered_map> qui a un certain avantage sur la carte de la structure. Vous pouvez faire de l'insertion si votre dictionnaire est comme 'c': "chat", "c":"voiture", "a": pomme, "une":"angus" :
J'ai trouvé qu'une structure peut bien travailler pour cette situation. Cette approche fondamentalement semblable à une classe) permet un nettoyant pour accéder à vos paramètres nommés comme bon vous semble.
Que les deux autres ont fait remarquer, std::multimap peut être votre solution.
Également envisager de std::tr1::unordered_multimap. Il est disponible dans VS 2008 semble l'avoir, GCC a au moins à partir de la version 4.3.
Il peut y avoir une autre approche pour obtenir deux valeurs par clé, en particulier pour les cas où la plupart des éléments de la carte ont deux valeurs par clé. Par l'appariement de deux valeurs d'une clé, comme mentionné dans ce lien:
l'utiliser dans la fonction: